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 19:37:22 +0100 |
| |
On Wednesday 21 of March 2012, Arnd Bergmann wrote: > On Wednesday 21 March 2012, Lubos Lunak wrote: > > > 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? > > Strictly speaking, you should not include standard headers from kernel > provided headers, and the problems would be similar to those before > your patch: anyone who currently doesn't include <stddef.h> but has > their own definition of NULL will still get a conflict from including > a kernel header that includes <linux/stddef.h>.
I guess I should point out that I'm not a kernel developer, I simply want to fix the problem that kernel headers redefine NULL to something suboptimal in userspace. So I don't know what the requirements on the headers are from the kernel side (and I wonder why you need your own NULL in the kernel when it comes with the compiler).
Let me provide one more patch then, which only surrounds the NULL definition by #ifndef NULL instead of bluntly doing #undef NULL. That way kernel should keep using this NULL definition, while it won't be forced in userspace.
-- Lubos Lunak l.lunak@suse.cz From 96e2b6caa5c52daade79635270ce96ce764fcd31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= <l.lunak@suse.cz> Date: Wed, 21 Mar 2012 19:32:02 +0100 Subject: [PATCH] do not redefine userspace's NULL #define 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 override what the compiler provides. Keep the #define conditionally, in order to keep the headers self-contained.
Signed-off-by: Luboš Luňák <l.lunak@suse.cz> --- include/linux/stddef.h | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/include/linux/stddef.h b/include/linux/stddef.h index 6a40c76..ce225a9 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h @@ -3,12 +3,13 @@ #include <linux/compiler.h> -#undef NULL +#ifndef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif +#endif #ifdef __KERNEL__ -- 1.7.7
| |