[OE-core] [PATCH] linux-libc-headers: fix duplicate IFF_LOWER_UP DORMANT ECHO on musl

André Draszik git at andred.net
Fri Jun 23 10:46:32 UTC 2017


connman is not doing anything wrong here.

The kernel is redefining IFF_LOWER_UP, because it thinks the libc doesn't
define it yet (and glibc doesn't).

libc-compat.h is the way to solve these kind of issues. There also is https:
//lkml.org/lkml/2017/3/12/238 which is very similar. I'll pick that instead.

Cheers,
Andre'

On Thu, 2017-06-22 at 22:26 +0000, Khem Raj wrote:
> I would rather fix the package instead of kernel headers unless kernel
> community accepts this patch
> 
> On Thu, Jun 22, 2017 at 11:14 AM André Draszik <git at andred.net> wrote:
> 
> > From: André Draszik <adraszik at tycoint.com>
> > 
> > musl _does_ define IFF_LOWER_UP DORMANT ECHO so we should
> > prevent redefinition of these when on musl.
> > 
> > As per the included patch, this can be triggered by
> > (from connman 6to4.c):
> >     include <errno.h>
> >     include <stdio.h>
> >     include <stdlib.h>
> >     include <string.h>
> >     include <sys/socket.h>
> >     include <netinet/in.h>
> >     include <arpa/inet.h>
> >     include <net/if.h>
> >     include <linux/ip.h>
> >     include <linux/if_tunnel.h>
> >     include <linux/netlink.h>
> >     include <linux/rtnetlink.h>
> >     include <sys/ioctl.h>
> >     include <unistd.h>
> > 
> > In file included from ../git/src/6to4.c:34:0:
> > .../usr/include/linux/if.h:97:2: error: expected identifier before
> > numeric
> > constant
> >   IFF_LOWER_UP   = 1<<16, /* __volatile__ */
> >   ^
> > 
> > This is because at that time, IFF_LOWER_UP has been converted
> > to 0x10000 already:
> > enum net_device_flags {
> >  0x10000 = 1<<16,
> >  0x20000 = 1<<17,
> >  0x40000 = 1<<18,
> > 
> > };
> > 
> > By defining __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
> > to 0, we avoid the duplicated definition.
> > 
> > Signed-off-by: André Draszik <adraszik at tycoint.com>
> > ---
> >  ....h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch | 62
> > ++++++++++++++++++++++
> >  .../linux-libc-headers/linux-libc-headers_4.10.bb  |  1 +
> >  2 files changed, 63 insertions(+)
> >  create mode 100644
> > meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-libc-
> > compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch
> > 
> > diff --git
> > a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-libc-
> > compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch
> > b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-libc-
> > compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch
> > new file mode 100644
> > index 0000000000..fd1bb9edb8
> > --- /dev/null
> > +++
> > b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-libc-
> > compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch
> > @@ -0,0 +1,62 @@
> > +From 08a04c025395b0580913285045f2af36ee0985db Mon Sep 17 00:00:00 2001
> > +From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <adraszik at tycoint.com>
> > +Date: Thu, 15 Jun 2017 16:55:33 +0100
> > +Subject: [PATCH] libc-compat.h: musl _does_ define IFF_LOWER_UP DORMANT
> > ECHO
> > +MIME-Version: 1.0
> > +Content-Type: text/plain; charset=UTF-8
> > +Content-Transfer-Encoding: 8bit
> > +
> > +To trigger this (from connman 6to4.c):
> > +    include <errno.h>
> > +    include <stdio.h>
> > +    include <stdlib.h>
> > +    include <string.h>
> > +    include <sys/socket.h>
> > +    include <netinet/in.h>
> > +    include <arpa/inet.h>
> > +    include <net/if.h>
> > +    include <linux/ip.h>
> > +    include <linux/if_tunnel.h>
> > +    include <linux/netlink.h>
> > +    include <linux/rtnetlink.h>
> > +    include <sys/ioctl.h>
> > +    include <unistd.h>
> > +
> > +In file included from ../git/src/6to4.c:34:0:
> > +/scratch/yocto/build-tgm-r3-poky-fpp-tgm.pyro/tmp/work/tgm_r3-poky-
> > linux-musl/connman/1.33-git4+AUTOINC+aa5b3dc12b-r0/recipe-
> > sysroot/usr/include/linux/if.h:97:2:
> > error: expected identifier before numeric constant
> > +  IFF_LOWER_UP   = 1<<16, /* __volatile__ */
> > +  ^
> > +
> > +This is because at that time, IFF_LOWER_UP has been converted
> > +to 0x10000 already:
> > +enum net_device_flags {
> > + 0x10000 = 1<<16,
> > + 0x20000 = 1<<17,
> > + 0x40000 = 1<<18,
> > +
> > +};
> > +
> > +Upstream-Status: Pending
> > +Signed-off-by: André Draszik <adraszik at tycoint.com>
> > +Acked-by: Stephane Ayotte <sayotte at tycoint.com>
> > +---
> > + include/uapi/linux/libc-compat.h | 3 ++-
> > + 1 file changed, 2 insertions(+), 1 deletion(-)
> > +
> > +diff --git a/include/uapi/linux/libc-compat.h
> > b/include/uapi/linux/libc-compat.h
> > +index f11ec0e..2003ae4 100644
> > +--- a/include/uapi/linux/libc-compat.h
> > ++++ b/include/uapi/linux/libc-compat.h
> > +@@ -70,7 +70,8 @@
> > + #define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0
> > + /* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO
> > */
> > + #ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
> > +-#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
> > ++/* musl has these defined */
> > ++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0
> > + #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
> > +
> > + #else /* _NET_IF_H */
> > +--
> > +2.11.0
> > +
> > diff --git a/meta/recipes-kernel/linux-libc-headers/
> > linux-libc-headers_4.10.bb b/meta/recipes-kernel/linux-libc-headers/
> > linux-libc-headers_4.10.bb
> > index 108446aa34..29262789a8 100644
> > --- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_4.10.bb
> > +++ b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_4.10.bb
> > @@ -4,6 +4,7 @@ SRC_URI_append_libc-musl = "\
> >      file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch
> > \
> >      file://0002-libc-compat.h-prevent-redefinition-of-struct-
> > ethhdr.patch
> > \
> >      file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
> > +
> > file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
> >     "
> > 
> >  SRC_URI[md5sum] = "b5e7f6b9b2fe1b6cc7bc56a3a0bfc090"
> > --
> > 2.11.0
> > 
> > --
> > _______________________________________________
> > Openembedded-core mailing list
> > Openembedded-core at lists.openembedded.org
> > http://lists.openembedded.org/mailman/listinfo/openembedded-core
> > 



More information about the Openembedded-core mailing list