[PATCH 2/5] uaccess: Add speculation barrier to copy_from_user_iter()

David Laight david.laight.linux at gmail.com
Tue Jun 24 18:07:48 AEST 2025


On Tue, 24 Jun 2025 07:49:03 +0200
Christophe Leroy <christophe.leroy at csgroup.eu> wrote:

> Le 22/06/2025 à 18:57, Linus Torvalds a écrit :
> > On Sun, 22 Jun 2025 at 02:52, Christophe Leroy
> > <christophe.leroy at csgroup.eu> wrote:  
> >>
> >> The results of "access_ok()" can be mis-speculated.  
> > 
> > Hmm. This code is critical. I think it should be converted to use that
> > masked address thing if we have to add it here.  
> 
> Ok, I'll add it.
> 
> > 
> > And at some point this access_ok() didn't even exist, because we check
> > the addresses at iter creation time. So this one might be a "belt and
> > suspenders" check, rather than something critical.
> > 
> > (Although I also suspect that when we added ITER_UBUF we might have
> > created cases where those user addresses aren't checked at iter
> > creation time any more).
> >   
> 
> Let's take the follow path as an exemple:
> 
> snd_pcm_ioctl(SNDRV_PCM_IOCTL_WRITEI_FRAMES)
>    snd_pcm_common_ioctl()
>      snd_pcm_xferi_frames_ioctl()
>        snd_pcm_lib_write()
>          __snd_pcm_lib_xfer()
>            default_write_copy()
>              copy_from_iter()
>                _copy_from_iter()
>                  __copy_from_iter()
>                    iterate_and_advance()
>                      iterate_and_advance2()
>                        iterate_iovec()
>                          copy_from_user_iter()
> 
> As far as I can see, none of those functions check the accessibility of 
> the iovec. Am I missing something ?

The import_ubuf() in do_transfer() ought to contain one.
But really you want the one in copy_from_user_iter() rather than the outer one.

Mind you that code is horrid.
The code only ever copies a single buffer, so could be much shorter.
And is that deep call chain really needed for the very common case of one buffer.

	David


> 
> Christophe



More information about the Linuxppc-dev mailing list