[PATCH] x86/uaccess: Avoid barrier_nospec() in copy_from_user()

David Laight David.Laight at ACULAB.COM
Thu Oct 24 20:21:56 AEDT 2024


From: Linus Torvalds
> Sent: 23 October 2024 21:08
> 
> On Wed, 23 Oct 2024 at 12:17, Linus Torvalds
> <torvalds at linux-foundation.org> wrote:
> >
> > NOTE! This is obviously untested and I didn't check that it does the
> > cmp/sbb/or the right way around.
> 
> Well, it boots. The code generation (from strncpy_from_user()) seems ok:
> 
>       movabs $0x123456789abcdef,%rcx
>       cmp    %rsi,%rcx
>       sbb    %ecx,%ecx
>       or     %rsi,%rcx
> 
> where obviously that constant is the bogus pre-initialized value, not
> the actual runtime value.

Would it be better to make the 'bogus' constant one that makes
all accesses fail?
So you soon find out it any code doesn't get patched.

I also wonder how big the table of addresses to patch is.
If that gets into inlined functions it could be big.

OTOH having a real function that does access_ok(), clac and address
masking may not problem.

Especially if there is always a (PAGE sized) gap between the highest
user address and the lowest kernel address so the 'size' argument
to access_ok() can be ignored on the assumption that the accesses
are (reasonably) linear.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


More information about the Linuxppc-dev mailing list