linux/tools/lib/bpf
Daniel Borkmann 61e0841523 libbpf: Skip initial_value override on signed loaders
bpf_gen__map_update_elem() emits code that, when the host-supplied
loader ctx provides a non-NULL map_desc[idx].initial_value, overwrites
the blob value with bytes read from the host (bpf_copy_from_user /
bpf_probe_read_kernel) before the BPF_MAP_UPDATE_ELEM that populates
the program's .data/.rodata/.bss maps.

This override runs after emit_signature_match() has validated map->sha[],
and initial_value is part of neither the signed loader instructions nor
the hashed data blob. For a signed loader this lets an untrusted host
substitute global-variable contents into a program whose code carries
a valid signature, thus weakening what the signature attests to.

The blob already contains the signer-provided value (added via add_data()
and covered by the embedded, signed hash), so simply skip emitting the
override for signed loaders (gen_hash). Runtime initialization stays
available for the unsigned light-skeleton path as before. The jump
offsets within the override block are internal to it, so guarding the
whole block leaves them unchanged.

Fixes: ea923080c1 ("libbpf: Embed and verify the metadata hash in the loader")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/r/20260601150248.394863-5-daniel@iogearbox.net
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
History 2026-06-01 18:36:40 -07:00
..
.gitignore tools build: Correct bpf fixdep dependencies 2024-08-05 12:19:48 -03:00
bpf.c libbpf: Add __NR_bpf definition for LoongArch 2026-05-28 14:38:15 -07:00
bpf.h libbpf: Add syscall common attributes support for map_create 2026-05-12 12:44:46 -07:00
bpf_core_read.h bpf: Fix uninitialized values in BPF_{CORE,PROBE}_READ 2025-05-05 14:20:28 -07:00
bpf_endian.h libbpf: Make bpf_endian co-exist with vmlinux.h 2020-07-01 09:06:12 +02:00
bpf_gen_internal.h libbpf: Embed and verify the metadata hash in the loader 2025-09-22 19:17:55 -07:00
bpf_helpers.h libbpf: Remove extern declaration of bpf_stream_vprintk() 2026-02-18 14:58:47 -08: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: Fix powerpc's stack register definition in bpf_tracing.h 2025-10-23 11:25:16 -07:00
btf.c libbpf: Fix deduplication of typedef with base definitions 2026-04-22 14:18:41 -07:00
btf.h libbpf: Adjust btf_vlen() to return a __u32 2026-04-20 17:52:48 -07:00
btf_dump.c libbpf: Adjust btf_vlen() to return a __u32 2026-04-20 17:52:48 -07:00
btf_iter.c libbpf,bpf: Share BTF relocate-related code with kernel 2024-06-21 14:45:07 -07:00
btf_relocate.c libbpf: Fix incorrect traversal end type ID when marking BTF_IS_EMBEDDED 2025-01-16 15:34:18 -08:00
Build libbpf: move libbpf_errstr() into libbpf_utils.c 2025-10-01 15:27:25 -07:00
elf.c libbpf: move libbpf_errstr() into libbpf_utils.c 2025-10-01 15:27:25 -07:00
features.c libbpf: Add support for extended BPF syscall 2026-05-12 12:44:39 -07:00
gen_loader.c libbpf: Skip initial_value override on signed loaders 2026-06-01 18:36:40 -07:00
hashmap.c libbpf: Hashmap interface update to allow both long and void* keys/values 2022-11-09 20:45:14 -08:00
hashmap.h libbpf: Fix possible compiler warnings in hashmap 2024-10-11 12:36:59 -07:00
libbpf.c libbpf: Add section handlers for sleepable tracepoints 2026-04-22 22:44:30 +02:00
libbpf.h libbpf: Clarify raw-address single kprobe attach behavior 2026-04-02 13:23:19 -07:00
libbpf.map libbpf: Fix BTF handling in bpf_program__clone() 2026-04-02 13:02:46 -07:00
libbpf.pc.template libbpf: Add zlib as a dependency in pkg-config template 2019-12-16 14:55:29 -08:00
libbpf_common.h libbpf: Fix potential uninitialized tail padding with LIBBPF_OPTS_RESET 2023-11-09 19:07:51 -08:00
libbpf_internal.h libbpf: Add support for extended BPF syscall 2026-05-12 12:44:39 -07:00
libbpf_legacy.h libbpf: Fix some typos in comments 2024-09-09 16:05:40 -07:00
libbpf_probes.c libbpf: Support sanitization of BTF layout for older kernels 2026-03-26 13:53:56 -07:00
libbpf_utils.c libbpf: Fix undefined behavior in {get,put}_unaligned_be32() 2025-10-06 09:16:29 -07:00
libbpf_version.h libbpf: Start v1.8 development cycle 2026-03-16 14:15:15 -07:00
linker.c libbpf: Fix invalid write loop logic in bpf_linker__add_buf() 2026-02-13 14:14:27 -08:00
Makefile tools: Remove redundant quiet setup 2025-02-18 16:27:43 -03:00
netlink.c bpftool: Fix truncated netlink dumps 2026-02-17 16:54:03 -08:00
nlattr.c libbpf: Use proper errno value in nlattr 2025-05-12 15:22:54 -07:00
nlattr.h libbpf: add API to get XDP/XSK supported features 2023-02-02 20:48:24 -08:00
relo_core.c libbpf: Adjust btf_vlen() to return a __u32 2026-04-20 17:52:48 -07:00
relo_core.h bpf, libbpf: Add type match support 2022-07-05 21:14:25 -07:00
ringbuf.c libbpf: move libbpf_errstr() into libbpf_utils.c 2025-10-01 15:27:25 -07:00
skel_internal.h libbpf: Use strscpy() in kernel code for skel_map_create() 2026-05-13 10:52:32 -07:00
strset.c libbpf: Fix UAF in strset__add_str() 2026-05-28 14:25:55 -07:00
strset.h libbpf: Extract internal set-of-strings datastructure APIs 2021-03-18 16:14:22 -07:00
usdt.bpf.h libbpf: Fix USDT SIB argument handling causing unrecognized register error 2025-08-27 15:44:25 -07:00
usdt.c libbpf: Harden parse_vma_segs() path parsing 2026-05-28 14:15:48 -07:00
zip.c libbpf: Remove unneeded semicolon 2024-10-03 17:47:35 -07:00
zip.h libbpf: Implement basic zip archive parsing support 2023-03-01 16:05:34 -08:00