Skip to content

Commit 2cb7379

Browse files
committed
powerpc/perf: Fix ref-counting on the PMU 'vpa_pmu'
JIRA: https://issues.redhat.com/browse/RHEL-77936 CVE: CVE-2025-22094 upstream ======== commit ff99d5b Author: Vaibhav Jain <[email protected]> Date: Tue Feb 4 21:05:26 2025 +0530 description =========== Commit 176cda0 ("powerpc/perf: Add perf interface to expose vpa counters") introduced 'vpa_pmu' to expose Book3s-HV nested APIv2 provided L1<->L2 context switch latency counters to L1 user-space via perf-events. However the newly introduced PMU named 'vpa_pmu' doesn't assign ownership of the PMU to the module 'vpa_pmu'. Consequently the module 'vpa_pmu' can be unloaded while one of the perf-events are still active, which can lead to kernel oops and panic of the form below on a Pseries-LPAR: BUG: Kernel NULL pointer dereference on read at 0x00000058 <snip> NIP [c000000000506cb8] event_sched_out+0x40/0x258 LR [c00000000050e8a4] __perf_remove_from_context+0x7c/0x2b0 Call Trace: [c00000025fc3fc30] [c00000025f8457a8] 0xc00000025f8457a8 (unreliable) [c00000025fc3fc80] [fffffffffffffee0] 0xfffffffffffffee0 [c00000025fc3fcd0] [c000000000501e70] event_function+0xa8/0x120 <snip> Kernel panic - not syncing: Aiee, killing interrupt handler! Fix this by adding the module ownership to 'vpa_pmu' so that the module 'vpa_pmu' is ref-counted and prevented from being unloaded when perf-events are initialized. Fixes: 176cda0 ("powerpc/perf: Add perf interface to expose vpa counters") Signed-off-by: Vaibhav Jain <[email protected]> Signed-off-by: Madhavan Srinivasan <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Michael Petlan <[email protected]>
1 parent f19972e commit 2cb7379

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

arch/powerpc/perf/vpa-pmu.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ static void vpa_pmu_del(struct perf_event *event, int flags)
156156
}
157157

158158
static struct pmu vpa_pmu = {
159+
.module = THIS_MODULE,
159160
.task_ctx_nr = perf_sw_context,
160161
.name = "vpa_pmu",
161162
.event_init = vpa_pmu_event_init,

0 commit comments

Comments
 (0)