Messages in this thread Patch in this message | | | From | Lubos Lunak <> | Subject | Re: [PATCH] do not export kernel's NULL #define to userspace | Date | Wed, 21 Mar 2012 15:09:27 +0100 |
| |
On Wednesday 21 of March 2012, Arnd Bergmann wrote: > On Wednesday 21 March 2012, Lubos Lunak wrote: > > GCC's NULL is actually __null, which allows detecting some questionable > > NULL usage and warn about it. Moreover each platform/compiler should have > > its own stddef.h anyway (which is different from linux/stddef.h). > > So there's no good reason to leak kernel's NULL to userspace and > > override what the compiler provides. > > > > Signed-off-by: Luboš Luňák <l.lunak@suse.cz> > > Yes, this looks like a bug, but I'm not sure that the solution is > sufficient. Have you checked the other exported header files > for whether they use NULL after including linux/stddef.h?
I have checked that the kernel builds with this change, and I have checked that the whole of LibreOffice compiles after the change. I'm not sure what you mean exactly, are you asking me to manually inspect everything under include/linux for NULL usage?
> If so, we might have to replace it with a __KERNEL_NULL constant > or something, like we do for the stuff in linux/types.h, so we > don't accidentally break user applications that rely on the > header files to be self-contained. > > I think there is at least a NULL usage in linux/wireless.h and some > netfilter headers.
I see. How about the attached patch then?
-- Lubos Lunak l.lunak@suse.cz From 9be4118ed1bc6221d4f2a73cad69de33285b0b2a Mon Sep 17 00:00:00 2001 From: Lubos Lunak <l.lunak@suse.cz> Date: Wed, 21 Mar 2012 14:04:31 +0100 Subject: [PATCH] do not export kernel's NULL #define to userspace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit
GCC's NULL is actually __null, which allows detecting some questionable NULL usage and warn about it. Moreover each platform/compiler should have its own stddef.h anyway (which is different from linux/stddef.h). So there's no good reason to leak kernel's NULL to userspace and override what the compiler provides. Include <stddef.h> in that case to make sure linux headers are self-contained in userspace as well.
Signed-off-by: Luboš Luňák <l.lunak@suse.cz> --- include/linux/stddef.h | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/include/linux/stddef.h b/include/linux/stddef.h index 6a40c76..1db853b 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h @@ -3,14 +3,10 @@ #include <linux/compiler.h> +#ifdef __KERNEL__ + #undef NULL -#if defined(__cplusplus) -#define NULL 0 -#else #define NULL ((void *)0) -#endif - -#ifdef __KERNEL__ enum { false = 0, @@ -23,6 +19,8 @@ enum { #else #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif +#else /* __KERNEL__ */ +#include <stddef.h> #endif /* __KERNEL__ */ #endif -- 1.7.3.4
| |