From: Dave Hansen <dave.hansen@xxxxxxxxx> > Sent: 10 March 2022 16:46 > > On 3/10/22 06:32, David Laight wrote: > >> UAI allows software to store a tag in the upper 7 bits of a logical > >> address [63:57]. When enabled, the processor will suppress the > >> traditional canonical address checks on the addresses. More information > >> about UAI can be found in section 5.10 of 'AMD64 Architecture > >> Programmer's Manual, Vol 2: System Programming' which is available from > >> > >> https://bugzilla.kernel.org/attachment.cgi?id=300549 > > Is that really allowing bit 63 to be used? > > That is normally the user-kernel bit. > > I can't help feeling that will just badly break things. > > Yeah, this does seem worrisome. The LAM approach[1] retains > canonicality checking for bit 63. Actually it is rather worse than 'worrisome'. Allowing the user all address upto the base of the valid kernel addresses (probably tags to 3e, but not 3f) means that you can't use a fast address check in access_ok(). You are forced to use the strict test that 32bit kernels use. Otherwise for 64bit access_ok() need only test address < 0 and rely on kernel code reading something below the (big) offset to valid kernel addresses. No real need to include the length at all. If the hardware is just ignoring the high address bits then the should be no need to mask them in kernel. The required kernel accesses to user memory should 'just work'. Of course, the bit to enable this (wherever it is) needs to be restored on every process switch. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)