diff mbox series

selinux-testsuite: add libelf to builds using libbpf

Message ID 156936589827.661145.16998799838921887816.stgit@chester (mailing list archive)
State Rejected
Headers show
Series selinux-testsuite: add libelf to builds using libbpf | expand

Commit Message

Paul Moore Sept. 24, 2019, 10:58 p.m. UTC
From: Paul Moore <paul@paul-moore.com>

On a modern Rawhide system builds that include libbpf require libelf
as well to avoid the following linker errors:

 # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
    client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
 /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
 /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
 /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
 /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
 /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'

Signed-off-by: Paul Moore <paul@paul-moore.com>
---
 tests/binder/Makefile    |    2 +-
 tests/bpf/Makefile       |    2 +-
 tests/fdreceive/Makefile |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

Comments

Ondrej Mosnacek Sept. 25, 2019, 9:06 a.m. UTC | #1
On Wed, Sep 25, 2019 at 12:58 AM Paul Moore <paul@paul-moore.com> wrote:
> From: Paul Moore <paul@paul-moore.com>
>
> On a modern Rawhide system builds that include libbpf require libelf
> as well to avoid the following linker errors:
>
>  # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
>     client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
>  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
>  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'

This is a bug in libbpf. I filed a bug against the Fedora package [1]
and also opened a PR [2] against the upstream repo (which is a
modified mirror of the code in the kernel repo under tools/lib/bpf,
where the bug is not present), which I think should fix this problem
also in the Fedora builds.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1755317
[2] https://github.com/libbpf/libbpf/pull/72

>
> Signed-off-by: Paul Moore <paul@paul-moore.com>
> ---
>  tests/binder/Makefile    |    2 +-
>  tests/bpf/Makefile       |    2 +-
>  tests/fdreceive/Makefile |    2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/tests/binder/Makefile b/tests/binder/Makefile
> index e78ad16..8f3cc28 100644
> --- a/tests/binder/Makefile
> +++ b/tests/binder/Makefile
> @@ -12,7 +12,7 @@ endif
>
>  ifneq (,$(findstring -DHAVE_BPF,$(CFLAGS)))
>         DEPS += ../bpf/bpf_common.c ../bpf/bpf_common.h
> -       LDLIBS += -lbpf
> +       LDLIBS += -lelf -lbpf
>  endif
>
>  all: $(TARGETS)
> diff --git a/tests/bpf/Makefile b/tests/bpf/Makefile
> index 6fb230d..7b00b41 100644
> --- a/tests/bpf/Makefile
> +++ b/tests/bpf/Makefile
> @@ -1,6 +1,6 @@
>  TARGETS = bpf_test
>  DEPS = bpf_common.c bpf_common.h
> -LDLIBS += -lselinux -lbpf
> +LDLIBS += -lselinux -lelf -lbpf
>
>  # export so that BPF_ENABLED entries get built correctly on local build
>  export CFLAGS += -DHAVE_BPF
> diff --git a/tests/fdreceive/Makefile b/tests/fdreceive/Makefile
> index 895f91c..cf57327 100644
> --- a/tests/fdreceive/Makefile
> +++ b/tests/fdreceive/Makefile
> @@ -2,7 +2,7 @@ TARGETS = client server
>
>  ifneq (,$(findstring -DHAVE_BPF,$(CFLAGS)))
>         DEPS = ../bpf/bpf_common.c ../bpf/bpf_common.h
> -       LDLIBS += -lbpf
> +       LDLIBS += -lelf -lbpf
>  endif
>
>  all: $(TARGETS)
>
Paul Moore Sept. 25, 2019, 3:22 p.m. UTC | #2
On Wed, Sep 25, 2019 at 5:06 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> On Wed, Sep 25, 2019 at 12:58 AM Paul Moore <paul@paul-moore.com> wrote:
> > From: Paul Moore <paul@paul-moore.com>
> >
> > On a modern Rawhide system builds that include libbpf require libelf
> > as well to avoid the following linker errors:
> >
> >  # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
> >     client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
> >  /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'
>
> This is a bug in libbpf. I filed a bug against the Fedora package [1]
> and also opened a PR [2] against the upstream repo (which is a
> modified mirror of the code in the kernel repo under tools/lib/bpf,
> where the bug is not present), which I think should fix this problem
> also in the Fedora builds.
>
> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1755317
> [2] https://github.com/libbpf/libbpf/pull/72

Thanks for tracking down the root cause and filing a report upstream;
I didn't have time to sort out the "why", I just wanted to get the
test working again :)

It looks like the best course of action is to hold off on this fix in
hopes that it gets fixed upstream, or at least in Fedora.  If this
issue persists for a week or two we can always go ahead and merge this
fix, it shouldn't break anything if/when this gets fixed upstream.

Tests that fail to run made me sad :(
Stephen Smalley Oct. 9, 2019, 6:27 p.m. UTC | #3
On 9/25/19 11:22 AM, Paul Moore wrote:
> On Wed, Sep 25, 2019 at 5:06 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
>> On Wed, Sep 25, 2019 at 12:58 AM Paul Moore <paul@paul-moore.com> wrote:
>>> From: Paul Moore <paul@paul-moore.com>
>>>
>>> On a modern Rawhide system builds that include libbpf require libelf
>>> as well to avoid the following linker errors:
>>>
>>>   # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
>>>      client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
>>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'
>>
>> This is a bug in libbpf. I filed a bug against the Fedora package [1]
>> and also opened a PR [2] against the upstream repo (which is a
>> modified mirror of the code in the kernel repo under tools/lib/bpf,
>> where the bug is not present), which I think should fix this problem
>> also in the Fedora builds.
>>
>> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1755317
>> [2] https://github.com/libbpf/libbpf/pull/72
> 
> Thanks for tracking down the root cause and filing a report upstream;
> I didn't have time to sort out the "why", I just wanted to get the
> test working again :)
> 
> It looks like the best course of action is to hold off on this fix in
> hopes that it gets fixed upstream, or at least in Fedora.  If this
> issue persists for a week or two we can always go ahead and merge this
> fix, it shouldn't break anything if/when this gets fixed upstream.
> 
> Tests that fail to run made me sad :(

FWIW, this is still broken on F30 (don't know about F31).  Any chance we 
can get the updated package pushed to F30/F31 too?
Paul Moore Oct. 9, 2019, 10:44 p.m. UTC | #4
On Wed, Oct 9, 2019 at 2:27 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> On 9/25/19 11:22 AM, Paul Moore wrote:
> > On Wed, Sep 25, 2019 at 5:06 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> >> On Wed, Sep 25, 2019 at 12:58 AM Paul Moore <paul@paul-moore.com> wrote:
> >>> From: Paul Moore <paul@paul-moore.com>
> >>>
> >>> On a modern Rawhide system builds that include libbpf require libelf
> >>> as well to avoid the following linker errors:
> >>>
> >>>   # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
> >>>      client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'
> >>
> >> This is a bug in libbpf. I filed a bug against the Fedora package [1]
> >> and also opened a PR [2] against the upstream repo (which is a
> >> modified mirror of the code in the kernel repo under tools/lib/bpf,
> >> where the bug is not present), which I think should fix this problem
> >> also in the Fedora builds.
> >>
> >> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1755317
> >> [2] https://github.com/libbpf/libbpf/pull/72
> >
> > Thanks for tracking down the root cause and filing a report upstream;
> > I didn't have time to sort out the "why", I just wanted to get the
> > test working again :)
> >
> > It looks like the best course of action is to hold off on this fix in
> > hopes that it gets fixed upstream, or at least in Fedora.  If this
> > issue persists for a week or two we can always go ahead and merge this
> > fix, it shouldn't break anything if/when this gets fixed upstream.
> >
> > Tests that fail to run made me sad :(
>
> FWIW, this is still broken on F30 (don't know about F31).  Any chance we
> can get the updated package pushed to F30/F31 too?

Alternatively, it is worth just patching the test suite?  It's
obviously better if Fedora (and all the other distros) fix this
everywhere, but it doesn't look like that is happening.
Ondrej Mosnacek Oct. 10, 2019, 11:42 a.m. UTC | #5
On Wed, Oct 9, 2019 at 8:27 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> On 9/25/19 11:22 AM, Paul Moore wrote:
> > On Wed, Sep 25, 2019 at 5:06 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> >> On Wed, Sep 25, 2019 at 12:58 AM Paul Moore <paul@paul-moore.com> wrote:
> >>> From: Paul Moore <paul@paul-moore.com>
> >>>
> >>> On a modern Rawhide system builds that include libbpf require libelf
> >>> as well to avoid the following linker errors:
> >>>
> >>>   # cc -g -O0 -Wall -D_GNU_SOURCE -DHAVE_BPF \
> >>>      client.c ../bpf/bpf_common.c ../bpf/bpf_common.h  -lbpf -o client
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getshdr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_rawdata'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getscn'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_begin'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getrel'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_memory'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_end'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_strptr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_nextscn'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getehdr'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_version'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `elf_getdata'
> >>>   /usr/bin/ld: ... libbpf.so: undefined reference to `gelf_getsym'
> >>
> >> This is a bug in libbpf. I filed a bug against the Fedora package [1]
> >> and also opened a PR [2] against the upstream repo (which is a
> >> modified mirror of the code in the kernel repo under tools/lib/bpf,
> >> where the bug is not present), which I think should fix this problem
> >> also in the Fedora builds.
> >>
> >> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1755317
> >> [2] https://github.com/libbpf/libbpf/pull/72
> >
> > Thanks for tracking down the root cause and filing a report upstream;
> > I didn't have time to sort out the "why", I just wanted to get the
> > test working again :)
> >
> > It looks like the best course of action is to hold off on this fix in
> > hopes that it gets fixed upstream, or at least in Fedora.  If this
> > issue persists for a week or two we can always go ahead and merge this
> > fix, it shouldn't break anything if/when this gets fixed upstream.
> >
> > Tests that fail to run made me sad :(
>
> FWIW, this is still broken on F30 (don't know about F31).  Any chance we
> can get the updated package pushed to F30/F31 too?

There are updates pending for F3[01], which both have the issue fixed:
https://bodhi.fedoraproject.org/updates/FEDORA-2019-aa28a02f4e
https://bodhi.fedoraproject.org/updates/FEDORA-2019-8519f326c2

Both should get pushed to stable automatically in 2 days if there is
no negative feedback (or earlier if there is enough positive feedback
- feel free to test and add +1 karma).

--
Ondrej Mosnacek <omosnace at redhat dot com>
Software Engineer, Security Technologies
Red Hat, Inc.
diff mbox series

Patch

diff --git a/tests/binder/Makefile b/tests/binder/Makefile
index e78ad16..8f3cc28 100644
--- a/tests/binder/Makefile
+++ b/tests/binder/Makefile
@@ -12,7 +12,7 @@  endif
 
 ifneq (,$(findstring -DHAVE_BPF,$(CFLAGS)))
 	DEPS += ../bpf/bpf_common.c ../bpf/bpf_common.h
-	LDLIBS += -lbpf
+	LDLIBS += -lelf -lbpf
 endif
 
 all: $(TARGETS)
diff --git a/tests/bpf/Makefile b/tests/bpf/Makefile
index 6fb230d..7b00b41 100644
--- a/tests/bpf/Makefile
+++ b/tests/bpf/Makefile
@@ -1,6 +1,6 @@ 
 TARGETS = bpf_test
 DEPS = bpf_common.c bpf_common.h
-LDLIBS += -lselinux -lbpf
+LDLIBS += -lselinux -lelf -lbpf
 
 # export so that BPF_ENABLED entries get built correctly on local build
 export CFLAGS += -DHAVE_BPF
diff --git a/tests/fdreceive/Makefile b/tests/fdreceive/Makefile
index 895f91c..cf57327 100644
--- a/tests/fdreceive/Makefile
+++ b/tests/fdreceive/Makefile
@@ -2,7 +2,7 @@  TARGETS = client server
 
 ifneq (,$(findstring -DHAVE_BPF,$(CFLAGS)))
 	DEPS = ../bpf/bpf_common.c ../bpf/bpf_common.h
-	LDLIBS += -lbpf
+	LDLIBS += -lelf -lbpf
 endif
 
 all: $(TARGETS)