* [PATCH bpf] libbpf: Fix segfault in static linker for objects without BTF
@ 2021-09-24 2:37 Kumar Kartikeya Dwivedi
2021-09-24 23:35 ` Andrii Nakryiko
0 siblings, 1 reply; 2+ messages in thread
From: Kumar Kartikeya Dwivedi @ 2021-09-24 2:37 UTC (permalink / raw)
To: bpf
When a BPF object is compiled without BTF info (without -g),
trying to link such objects using bpftool causes a SIGSEGV due to
btf__get_nr_types accessing obj->btf which is NULL. Fix this by
checking for the NULL pointer, and return error.
Reproducer:
$ cat a.bpf.c
extern int foo(void);
int bar(void) { return foo(); }
$ cat b.bpf.c
int foo(void) { return 0; }
$ clang -O2 -target bpf -c a.bpf.c
$ clang -O2 -target bpf -c b.bpf.c
$ bpftool gen obj out a.bpf.o b.bpf.o
Segmentation fault (core dumped)
After fix:
$ bpftool gen obj out a.bpf.o b.bpf.o
libbpf: failed to find BTF info for object 'a.bpf.o'
Error: failed to link 'a.bpf.o': Unknown error -22 (-22)
Fixes: a46349227cd8 (libbpf: Add linker extern resolution support for functions and global variables)
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
---
tools/lib/bpf/linker.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
index 10911a8cad0f..2df880cefdae 100644
--- a/tools/lib/bpf/linker.c
+++ b/tools/lib/bpf/linker.c
@@ -1649,11 +1649,17 @@ static bool btf_is_non_static(const struct btf_type *t)
static int find_glob_sym_btf(struct src_obj *obj, Elf64_Sym *sym, const char *sym_name,
int *out_btf_sec_id, int *out_btf_id)
{
- int i, j, n = btf__get_nr_types(obj->btf), m, btf_id = 0;
+ int i, j, n, m, btf_id = 0;
const struct btf_type *t;
const struct btf_var_secinfo *vi;
const char *name;
+ if (!obj->btf) {
+ pr_warn("failed to find BTF info for object '%s'\n", obj->filename);
+ return -EINVAL;
+ }
+
+ n = btf__get_nr_types(obj->btf);
for (i = 1; i <= n; i++) {
t = btf__type_by_id(obj->btf, i);
--
2.33.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH bpf] libbpf: Fix segfault in static linker for objects without BTF
2021-09-24 2:37 [PATCH bpf] libbpf: Fix segfault in static linker for objects without BTF Kumar Kartikeya Dwivedi
@ 2021-09-24 23:35 ` Andrii Nakryiko
0 siblings, 0 replies; 2+ messages in thread
From: Andrii Nakryiko @ 2021-09-24 23:35 UTC (permalink / raw)
To: Kumar Kartikeya Dwivedi; +Cc: bpf
On Thu, Sep 23, 2021 at 7:39 PM Kumar Kartikeya Dwivedi
<memxor@gmail.com> wrote:
>
> When a BPF object is compiled without BTF info (without -g),
> trying to link such objects using bpftool causes a SIGSEGV due to
> btf__get_nr_types accessing obj->btf which is NULL. Fix this by
> checking for the NULL pointer, and return error.
>
> Reproducer:
> $ cat a.bpf.c
> extern int foo(void);
> int bar(void) { return foo(); }
> $ cat b.bpf.c
> int foo(void) { return 0; }
> $ clang -O2 -target bpf -c a.bpf.c
> $ clang -O2 -target bpf -c b.bpf.c
> $ bpftool gen obj out a.bpf.o b.bpf.o
> Segmentation fault (core dumped)
>
> After fix:
> $ bpftool gen obj out a.bpf.o b.bpf.o
> libbpf: failed to find BTF info for object 'a.bpf.o'
> Error: failed to link 'a.bpf.o': Unknown error -22 (-22)
>
> Fixes: a46349227cd8 (libbpf: Add linker extern resolution support for functions and global variables)
> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> ---
> tools/lib/bpf/linker.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
Applied to bpf, thanks.
[...]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-09-24 23:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 2:37 [PATCH bpf] libbpf: Fix segfault in static linker for objects without BTF Kumar Kartikeya Dwivedi
2021-09-24 23:35 ` Andrii Nakryiko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.