Skip to content

Commit 0be9ae5

Browse files
Hou Taoborkmann
authored andcommitted
bpf, events: Use prog to emit ksymbol event for main program
Since commit 0108a4e ("bpf: ensure main program has an extable"), prog->aux->func[0]->kallsyms is left as uninitialized. For BPF programs with subprogs, the symbol for the main program is missing just as shown in the output of perf script below: ffffffff81284b69 qp_trie_lookup_elem+0xb9 ([kernel.kallsyms]) ffffffffc0011125 bpf_prog_a4a0eb0651e6af8b_lookup_qp_trie+0x5d (bpf...) ffffffff8127bc2b bpf_for_each_array_elem+0x7b ([kernel.kallsyms]) ffffffffc00110a1 +0x25 () ffffffff8121a89a trace_call_bpf+0xca ([kernel.kallsyms]) Fix it by always using prog instead prog->aux->func[0] to emit ksymbol event for the main program. After the fix, the output of perf script will be correct: ffffffff81284b96 qp_trie_lookup_elem+0xe6 ([kernel.kallsyms]) ffffffffc001382d bpf_prog_a4a0eb0651e6af8b_lookup_qp_trie+0x5d (bpf...) ffffffff8127bc2b bpf_for_each_array_elem+0x7b ([kernel.kallsyms]) ffffffffc0013779 bpf_prog_245c55ab25cfcf40_qp_trie_lookup+0x25 (bpf...) ffffffff8121a89a trace_call_bpf+0xca ([kernel.kallsyms]) Fixes: 0108a4e ("bpf: ensure main program has an extable") Signed-off-by: Hou Tao <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Tested-by: Yonghong Song <[email protected]> Reviewed-by: Krister Johansen <[email protected]> Reviewed-by: Jiri Olsa <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 6caf9ef commit 0be9ae5

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

kernel/events/core.c

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9327,21 +9327,19 @@ static void perf_event_bpf_emit_ksymbols(struct bpf_prog *prog,
93279327
bool unregister = type == PERF_BPF_EVENT_PROG_UNLOAD;
93289328
int i;
93299329

9330-
if (prog->aux->func_cnt == 0) {
9331-
perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_BPF,
9332-
(u64)(unsigned long)prog->bpf_func,
9333-
prog->jited_len, unregister,
9334-
prog->aux->ksym.name);
9335-
} else {
9336-
for (i = 0; i < prog->aux->func_cnt; i++) {
9337-
struct bpf_prog *subprog = prog->aux->func[i];
9338-
9339-
perf_event_ksymbol(
9340-
PERF_RECORD_KSYMBOL_TYPE_BPF,
9341-
(u64)(unsigned long)subprog->bpf_func,
9342-
subprog->jited_len, unregister,
9343-
subprog->aux->ksym.name);
9344-
}
9330+
perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_BPF,
9331+
(u64)(unsigned long)prog->bpf_func,
9332+
prog->jited_len, unregister,
9333+
prog->aux->ksym.name);
9334+
9335+
for (i = 1; i < prog->aux->func_cnt; i++) {
9336+
struct bpf_prog *subprog = prog->aux->func[i];
9337+
9338+
perf_event_ksymbol(
9339+
PERF_RECORD_KSYMBOL_TYPE_BPF,
9340+
(u64)(unsigned long)subprog->bpf_func,
9341+
subprog->jited_len, unregister,
9342+
subprog->aux->ksym.name);
93459343
}
93469344
}
93479345

0 commit comments

Comments
 (0)