perf: Fixup SIGTRAP and sample_flags interaction
authorPeter Zijlstra <peterz@infradead.org>
Mon, 21 Nov 2022 14:57:44 +0000 (15:57 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 24 Nov 2022 09:12:23 +0000 (10:12 +0100)
The perf_event_attr::sigtrap functionality relies on data->addr being
set. However commit 7b0846301531 ("perf: Use sample_flags for addr")
changed this to only initialize data->addr when not 0.

Fixes: 7b0846301531 ("perf: Use sample_flags for addr")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/Y3426b4OimE%2FI5po%40hirez.programming.kicks-ass.net
kernel/events/core.c

index 8848714..f2bb27e 100644 (file)
@@ -9328,7 +9328,10 @@ static int __perf_event_overflow(struct perf_event *event,
                         */
                        WARN_ON_ONCE(event->pending_sigtrap != pending_id);
                }
-               event->pending_addr = data->addr;
+
+               event->pending_addr = 0;
+               if (data->sample_flags & PERF_SAMPLE_ADDR)
+                       event->pending_addr = data->addr;
                irq_work_queue(&event->pending_irq);
        }