Skip to content

Commit 100bff2

Browse files
khueyAlexei Starovoitov
authored andcommitted
perf/bpf: Don't call bpf_overflow_handler() for tracing events
The regressing commit is new in 6.10. It assumed that anytime event->prog is set bpf_overflow_handler() should be invoked to execute the attached bpf program. This assumption is false for tracing events, and as a result the regressing commit broke bpftrace by invoking the bpf handler with garbage inputs on overflow. Prior to the regression the overflow handlers formed a chain (of length 0, 1, or 2) and perf_event_set_bpf_handler() (the !tracing case) added bpf_overflow_handler() to that chain, while perf_event_attach_bpf_prog() (the tracing case) did not. Both set event->prog. The chain of overflow handlers was replaced by a single overflow handler slot and a fixed call to bpf_overflow_handler() when appropriate. This modifies the condition there to check event->prog->type == BPF_PROG_TYPE_PERF_EVENT, restoring the previous behavior and fixing bpftrace. Signed-off-by: Kyle Huey <[email protected]> Suggested-by: Andrii Nakryiko <[email protected]> Reported-by: Joe Damato <[email protected]> Closes: https://lore.kernel.org/lkml/ZpFfocvyF3KHaSzF@LQ3V64L9R2/ Fixes: f11f10b ("perf/bpf: Call BPF handler directly, not through overflow machinery") Cc: [email protected] Tested-by: Joe Damato <[email protected]> # bpftrace Acked-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent 662c3e2 commit 100bff2

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

kernel/events/core.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9706,7 +9706,8 @@ static int __perf_event_overflow(struct perf_event *event,
97069706

97079707
ret = __perf_event_account_interrupt(event, throttle);
97089708

9709-
if (event->prog && !bpf_overflow_handler(event, data, regs))
9709+
if (event->prog && event->prog->type == BPF_PROG_TYPE_PERF_EVENT &&
9710+
!bpf_overflow_handler(event, data, regs))
97109711
return ret;
97119712

97129713
/*

0 commit comments

Comments
 (0)