Message ID | 20241126172332.112212-7-ubizjak@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Enable strict percpu address space checks | expand |
> On 26 Nov 2024, at 19:21, Uros Bizjak <ubizjak@gmail.com> wrote: > > This patch declares percpu variables in __seg_gs/__seg_fs named AS > and keeps them named AS qualified until they are dereferenced with > percpu accessor. This approach enables various compiler check > for cross-namespace variable assignments. [snip] > @@ -95,9 +95,19 @@ > > #endif /* CONFIG_SMP */ > > -#define __my_cpu_type(var) typeof(var) __percpu_seg_override > -#define __my_cpu_ptr(ptr) (__my_cpu_type(*(ptr))*)(__force uintptr_t)(ptr) > -#define __my_cpu_var(var) (*__my_cpu_ptr(&(var))) > +#if defined(CONFIG_USE_X86_SEG_SUPPORT) && \ > + defined(CONFIG_CC_HAS_TYPEOF_UNQUAL) && !defined(__CHECKER__) Is the __CHECKER__ check because of sparse, as in patch 2/6 ? If so, do you want to add a similar comment here? Other than that, I went over the different patches and it looks good as much as I can tell. If it means anything, you have for the series Acked-by: Nadav Amit <nadav.amit@gmail.com <mailto:nadav.amit@gmail.com>>
On Fri, Nov 29, 2024 at 4:45 PM Nadav Amit <nadav.amit@gmail.com> wrote: > > > > On 26 Nov 2024, at 19:21, Uros Bizjak <ubizjak@gmail.com> wrote: > > > > This patch declares percpu variables in __seg_gs/__seg_fs named AS > > and keeps them named AS qualified until they are dereferenced with > > percpu accessor. This approach enables various compiler check > > for cross-namespace variable assignments. > > [snip] > > > @@ -95,9 +95,19 @@ > > > > #endif /* CONFIG_SMP */ > > > > -#define __my_cpu_type(var) typeof(var) __percpu_seg_override > > -#define __my_cpu_ptr(ptr) (__my_cpu_type(*(ptr))*)(__force uintptr_t)(ptr) > > -#define __my_cpu_var(var) (*__my_cpu_ptr(&(var))) > > +#if defined(CONFIG_USE_X86_SEG_SUPPORT) && \ > > + defined(CONFIG_CC_HAS_TYPEOF_UNQUAL) && !defined(__CHECKER__) > > Is the __CHECKER__ check because of sparse, as in patch 2/6 ? > If so, do you want to add a similar comment here? Yes, this is the same check. We can declare _percpu variables in __seg_gs named address space only when __typeof_unqual__ is used. I will add a comment in the next revision of the patchset. > Other than that, I went over the different patches and it looks good as > much as I can tell. > > If it means anything, you have for the series > > Acked-by: Nadav Amit <nadav.amit@gmail.com <mailto:nadav.amit@gmail.com>> Thanks! Uros.
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 27f668660abe..61b875243ea3 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h @@ -95,9 +95,19 @@ #endif /* CONFIG_SMP */ -#define __my_cpu_type(var) typeof(var) __percpu_seg_override -#define __my_cpu_ptr(ptr) (__my_cpu_type(*(ptr))*)(__force uintptr_t)(ptr) -#define __my_cpu_var(var) (*__my_cpu_ptr(&(var))) +#if defined(CONFIG_USE_X86_SEG_SUPPORT) && \ + defined(CONFIG_CC_HAS_TYPEOF_UNQUAL) && !defined(__CHECKER__) +# define __my_cpu_type(var) typeof(var) +# define __my_cpu_ptr(ptr) (ptr) +# define __my_cpu_var(var) (var) + +# define __per_cpu_qual __percpu_seg_override +#else +# define __my_cpu_type(var) typeof(var) __percpu_seg_override +# define __my_cpu_ptr(ptr) (__my_cpu_type(*(ptr))*)(__force uintptr_t)(ptr) +# define __my_cpu_var(var) (*__my_cpu_ptr(&(var))) +#endif + #define __percpu_arg(x) __percpu_prefix "%" #x #define __force_percpu_arg(x) __force_percpu_prefix "%" #x
This patch declares percpu variables in __seg_gs/__seg_fs named AS and keeps them named AS qualified until they are dereferenced with percpu accessor. This approach enables various compiler check for cross-namespace variable assignments. Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Cc: Dennis Zhou <dennis@kernel.org> Cc: Tejun Heo <tj@kernel.org> Cc: Christoph Lameter <cl@linux.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Cc: Nadav Amit <nadav.amit@gmail.com> Cc: Brian Gerst <brgerst@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> --- arch/x86/include/asm/percpu.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)