mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
perf bpf: Add PROG_TAGS to required arrays in __bpf_event__print_bpf_prog_info()
synthesize_bpf_prog_name() unconditionally dereferences prog_tags[sub_id]
(line: u8 (*prog_tags)[BPF_TAG_SIZE] = (void *)(uintptr_t)(info->prog_tags))
but __bpf_event__print_bpf_prog_info() only requires JITED_KSYMS and
JITED_FUNC_LENS in its required_arrays bitmask.
If a crafted perf.data has the PROG_TAGS bit cleared (or the array was
invalidated by bpil_offs_to_addr() bounds checking), info->prog_tags
contains either zero or a raw file offset. Dereferencing it causes a
NULL pointer dereference or an arbitrary memory read.
Add PERF_BPIL_PROG_TAGS to required_arrays so the function returns early
when prog_tags was not present or failed validation.
Fixes: f8dfeae009 ("perf bpf: Show more BPF program info in print_bpf_prog_info()")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: Song Liu <songliubraving@fb.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
60f2f5b765
commit
38ba525335
|
|
@ -969,7 +969,8 @@ void __bpf_event__print_bpf_prog_info(struct perf_bpil *info_linear,
|
|||
{
|
||||
struct bpf_prog_info *info = &info_linear->info;
|
||||
__u64 required_arrays = (1UL << PERF_BPIL_JITED_KSYMS) |
|
||||
(1UL << PERF_BPIL_JITED_FUNC_LENS);
|
||||
(1UL << PERF_BPIL_JITED_FUNC_LENS) |
|
||||
(1UL << PERF_BPIL_PROG_TAGS);
|
||||
__u32 *prog_lens;
|
||||
__u64 *prog_addrs;
|
||||
char name[KSYM_NAME_LEN];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user