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

Khem Raj raj.khem at gmail.com
Fri Jun 23 13:37:52 UTC 2017


On Fri, Jun 23, 2017 at 3:46 AM, André Draszik <git at andred.net> wrote:
> connman is not doing anything wrong here.
>

yes I am aware of this

> 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.
>
see the comment https://lkml.org/lkml/2017/3/16/121
that worries me for this patch

I am not questioning the correctness of patch too. But
it would be better to get this patch accepted into kernel
before applying to OE since these are kind of patches which
you can get stuck with for life if upstream is not accepting it.

> 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
>> >
> --
> _______________________________________________
> 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