On 4/5/2022 1:44 PM, Peter Zijlstra wrote: > On Wed, Mar 23, 2022 at 01:18:41PM +0530, Bharata B Rao wrote: >> On 3/22/2022 3:59 AM, Andy Lutomirski wrote: > >>> I hate to be a pain, but I'm really not convinced that this feature >>> is suitable for Linux. There are a few reasons: >>> >>> Right now, the concept that the high bit of an address determines >>> whether it's a user or a kernel address is fairly fundamental to the >>> x86_64 (and x86_32!) code. It may not be strictly necessary to >>> preserve this, but violating it would require substantial thought. >>> With UAI enabled, kernel and user addresses are, functionally, >>> interleaved. This makes things like access_ok checks, and more >>> generally anything that operates on a range of addresses, behave >>> potentially quite differently. A lot of auditing of existing code >>> would be needed to make it safe. >> >> Ok got that. However can you point to me a few instances in the current >> kernel code where such assumption of high bit being user/kernel address >> differentiator exists so that I get some idea of what it takes to >> audit all such cases? > > The fact that you have to ask and can't readily find them should be a > big honking clue on its own, no? > > Anyway, see here: > > arch/x86/events/perf_event.h:static inline bool kernel_ip(unsigned long ip) > arch/x86/events/perf_event.h:{ > arch/x86/events/perf_event.h:#ifdef CONFIG_X86_32 > arch/x86/events/perf_event.h: return ip > PAGE_OFFSET; > arch/x86/events/perf_event.h:#else > arch/x86/events/perf_event.h: return (long)ip < 0; > arch/x86/events/perf_event.h:#endif > arch/x86/events/perf_event.h:} That's a pretty good and clear example. Thanks Peter. I do now see that auditing all such instances would be an uphill task. Regards, Bharata.