lkml.org 
[lkml]   [2012]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] do not export kernel's NULL #define to userspace
    Date
    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
    \
     
     \ /
      Last update: 2012-03-21 15:11    [W:2.847 / U:0.936 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site