linux/tools/lib/bpf
Daniel Xu c34c338a40 libbpf: Do not close un-owned FD 0 on errors
Before this patch, btf_new() was liable to close an arbitrary FD 0 if
BTF parsing failed. This was because:

* btf->fd was initialized to 0 through the calloc()
* btf__free() (in the `done` label) closed any FDs >= 0
* btf->fd is left at 0 if parsing fails

This issue was discovered on a system using libbpf v0.3 (without
BTF_KIND_FLOAT support) but with a kernel that had BTF_KIND_FLOAT types
in BTF. Thus, parsing fails.

While this patch technically doesn't fix any issues b/c upstream libbpf
has BTF_KIND_FLOAT support, it'll help prevent issues in the future if
more BTF types are added. It also allow the fix to be backported to
older libbpf's.

Fixes: 3289959b97 ("libbpf: Support BTF loading and raw data output in both endianness")
Signed-off-by: Daniel Xu <dxu@dxuuu.xyz>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/5969bb991adedb03c6ae93e051fd2a00d293cf25.1627513670.git.dxu@dxuuu.xyz
2021-08-07 01:39:15 +02:00
..
.gitignore
Build libbpf: Generate loader program out of BPF ELF file. 2021-05-19 00:39:40 +02:00
Makefile libbpf: Install skel_internal.h header used from light skeletons 2021-06-03 15:50:11 +02:00
bpf.c libbpf: Streamline error reporting for low-level APIs 2021-05-25 17:32:35 -07:00
bpf.h bpf: Extend libbpf with bpf_map_lookup_and_delete_elem_flags 2021-05-24 13:30:51 -07:00
bpf_core_read.h
bpf_endian.h
bpf_gen_internal.h libbpf: Cleanup temp FDs when intermediate sys_bpf fails. 2021-05-19 00:40:44 +02:00
bpf_helpers.h libbpf: Move BPF_SEQ_PRINTF and BPF_SNPRINTF to bpf_helpers.h 2021-05-26 10:45:41 -07:00
bpf_prog_linfo.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
bpf_tracing.h libbpf: Fail compilation if target arch is missing 2021-06-16 20:15:30 -07:00
btf.c libbpf: Do not close un-owned FD 0 on errors 2021-08-07 01:39:15 +02:00
btf.h
btf_dump.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
gen_loader.c libbpf: Cleanup temp FDs when intermediate sys_bpf fails. 2021-05-19 00:40:44 +02:00
hashmap.c
hashmap.h
libbpf.c libbpf: Restore errno return for functions that were already returning it 2021-07-06 21:13:08 -07:00
libbpf.h libbpf: Add libbpf_set_strict_mode() API to turn on libbpf 1.0 behaviors 2021-05-25 17:32:34 -07:00
libbpf.map libbpf: Move few APIs from 0.4 to 0.5 version 2021-06-03 15:50:05 +02:00
libbpf.pc.template
libbpf_common.h
libbpf_errno.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
libbpf_internal.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2021-06-17 11:54:56 -07:00
libbpf_legacy.h libbpf: Streamline error reporting for low-level APIs 2021-05-25 17:32:35 -07:00
libbpf_probes.c libbpf: Fix probe for BPF_PROG_TYPE_CGROUP_SOCKOPT 2021-08-07 01:38:52 +02:00
linker.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
netlink.c libbpf: Switch to void * casting in netlink helpers 2021-06-22 17:04:02 +02:00
nlattr.c libbpf: Switch to void * casting in netlink helpers 2021-06-22 17:04:02 +02:00
nlattr.h libbpf: Switch to void * casting in netlink helpers 2021-06-22 17:04:02 +02:00
ringbuf.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
skel_internal.h bpf: Add cmd alias BPF_PROG_RUN 2021-05-19 15:35:12 +02:00
str_error.c
str_error.h
strset.c
strset.h
xsk.c libbpf: Fixes incorrect rx_ring_setup_done 2021-06-07 17:44:03 -07:00
xsk.h