• Hauke Mehrtens's avatar
    uapi/if_ether.h: move __UAPI_DEF_ETHHDR libc define · da360299
    Hauke Mehrtens authored
    This fixes a compile problem of some user space applications by not
    including linux/libc-compat.h in uapi/if_ether.h.
    
    linux/libc-compat.h checks which "features" the header files, included
    from the libc, provide to make the Linux kernel uapi header files only
    provide no conflicting structures and enums. If a user application mixes
    kernel headers and libc headers it could happen that linux/libc-compat.h
    gets included too early where not all other libc headers are included
    yet. Then the linux/libc-compat.h would not prevent all the
    redefinitions and we run into compile problems.
    This patch removes the include of linux/libc-compat.h from
    uapi/if_ether.h to fix the recently introduced case, but not all as this
    is more or less impossible.
    
    It is no problem to do the check directly in the if_ether.h file and not
    in libc-compat.h as this does not need any fancy glibc header detection
    as glibc never provided struct ethhdr and should define
    __UAPI_DEF_ETHHDR by them self when they will provide this.
    
    The following test program did not compile correctly any more:
    
    #include <linux/if_ether.h>
    #include <netinet/in.h>
    #include <linux/in.h>
    
    int main(void)
    {
    	return 0;
    }
    
    Fixes: 6926e041 ("uapi/if_ether.h: prevent redefinition of struct ethhdr")
    Reported-by: default avatarGuillaume Nault <g.nault@alphalink.fr>
    Cc: <stable@vger.kernel.org> # 4.15
    Signed-off-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    da360299
libc-compat.h 8.11 KB