From f5a78ecccd98a04c47cea1cd63c2a2fdce8a4b48 Mon Sep 17 00:00:00 2001 From: vineash Date: Tue, 13 Oct 2026 16:13:20 +0800 Subject: [PATCH] perf/x86: Don't WARN when the ext_regs_buf allocation fails reserve_ext_regs_buffers() wraps the per-CPU ext_regs_buf allocation in WARN_ON_ONCE(). The allocator already prints a warning with a stack dump when a GFP_KERNEL allocation fails, so the WARN only repeats it, which Documentation/process/coding-style.rst asks not to do. The failure is also handled: the buffers are freed again, the event is still created, and events that ask for SIMD or extended register sampling are rejected with -ENOMEM in x86_pmu_hw_config() and event_simd_regs_validate(). syzkaller hit this with fault injection on next-20261002. The trigger is a plain hardware cycles event opened while no other x86 PMU event exists, with the allocation failed: !per_cpu(ext_regs_buf, cpu) WARNING: arch/x86/events/core.c:441 at reserve_ext_regs_buffers arch/x86/events/core.c:441 [inline] WARNING: arch/x86/events/core.c:441 at x86_reserve_hardware+0x6ff/0x880 arch/x86/events/core.c:458 Call Trace: __x86_pmu_event_init arch/x86/events/core.c:825 [inline] x86_pmu_event_init+0x109/0xc50 arch/x86/events/core.c:3003 perf_try_init_event+0x140/0xbc0 kernel/events/core.c:13261 perf_init_event kernel/events/core.c:13365 [inline] perf_event_alloc+0x2145/0x5680 kernel/events/core.c:13640 __do_sys_perf_event_open+0x669/0x2d40 kernel/events/core.c:14185 do_syscall_64+0x12c/0x7b0 arch/x86/entry/syscall_64.c:84 entry_SYSCALL_64_after_hwframe+0x77/0x7f Drop the WARN_ON_ONCE(). This matches reserve_ds_buffers() and reserve_lbr_buffers(), which also handle allocation failure without a warning. Fixes: b84c96283684 ("perf/x86: Enable XMM register sampling for non-PEBS events") Assisted-by: Claude:claude-opus-5-5 syzkaller Signed-off-by: vineash Signed-off-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/179187920064.3441876.15687522011658301558@gmail.com --- arch/x86/events/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index 9b1a9032e36d..4df792b139e0 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -438,7 +438,7 @@ static void reserve_ext_regs_buffers(void) for_each_possible_cpu(cpu) { per_cpu(ext_regs_buf, cpu) = kzalloc_node(size, GFP_KERNEL, cpu_to_node(cpu)); - if (WARN_ON_ONCE(!per_cpu(ext_regs_buf, cpu))) + if (!per_cpu(ext_regs_buf, cpu)) goto err; }