In the Linux kernel, the following vulnerability has been resolved:
perf: Fix hang while freeing sigtrap event
Perf can hang while freeing a sigtrap event if a related deferred signal hadn't managed to be sent before the file got closed:
perf_event_overflow() task_work_add(perf_pending_task)
fput() task_work_add(____fput())
task_work_run() ____fput() perf_release() perf_event_release_kernel() _free_event() perf_pending_task_sync() task_work_cancel() -> FAILED rcuwait_wait_event()
Once task_work_run() is running, the list of pending callbacks is removed from the task_struct and from this point on task_work_cancel() can't remove any pending and not yet started work items, hence the task_work_cancel() failure and the hang on rcuwait_wait_event().
Task work could be changed to remove one work at a time, so a work running on the current task can always cancel a pending one, however the wait / wake design is still subject to inverted dependencies when remote targets are involved, as pictured by Oleg:
T1 T2
fd = perf_event_open(pid => T2->pid); fd = perf_event_open(pid => T1->pid); close(fd) close(fd) <IRQ> <IRQ> perf_event_overflow() perf_event_overflow() task_work_add(perf_pending_task) task_work_add(perf_pending_task) </IRQ> </IRQ> fput() fput() task_work_add(____fput()) task_work_add(____fput())
task_work_run() task_work_run() ____fput() ____fput() perf_release() perf_release() perf_event_release_kernel() perf_event_release_kernel() _free_event() _free_event() perf_pending_task_sync() perf_pending_task_sync() rcuwait_wait_event() rcuwait_wait_event()
Therefore the only option left is to acquire the event reference count upon queueing the perf task work and release it from the task work, just like it was done before 3a5465418f5f ("perf: Fix event leak upon exec and file release") but without the leaks it fixed.
Some adjustments are necessary to make it work:
* A child event might dereference its parent upon freeing. Care must be taken to release the parent last.
* Some places assuming the event doesn't have any reference held and therefore can be freed right away must instead put the reference and let the reference counting to its job.
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade kernel-libbpfUpgrade kernel6.12Upgrade kernel-headersUpgrade kernel-tools-debuginfoUpgrade perf6.12Upgrade kernel6.12-debuginfo-common-aarch64Upgrade bpftool-debuginfoUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-toolsUpgrade kernel-libbpf-debuginfoUpgrade kernel6.12-modules-extraUpgrade perf6.12-debuginfoUpgrade python3-perf6.12-debuginfoUpgrade kernel-modules-extra-commonUpgrade bpftoolUpgrade kernel-tools-develUpgrade python3-perf6.12Upgrade kernel-livepatch-6.12.25-32.101Upgrade kernel-libbpf-staticUpgrade kernel-develUpgrade kernel6.12-debuginfoUpgrade kernel-libbpf-devel | Aug 5, 2025 | May 1, 2025 |
| Debian | — | Upgrade linux | May 15, 2025 | May 1, 2025 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | May 1, 2025 |
| Suse | — | Upgrade kselftests-kmp-64kbUpgrade kernel-64kbUpgrade kernel-rt_debug-vdsoUpgrade kernel-sourceUpgrade dlm-kmp-64kbUpgrade dtb-amazonUpgrade ocfs2-kmp-rtUpgrade kernel-64kb-optionalUpgrade kernel-azure-extraUpgrade kernel-rt-livepatch-develUpgrade kernel-zfcpdumpUpgrade kernel-default-livepatchUpgrade dtb-xilinxUpgrade kernel-devel-azureUpgrade kernel-macrosUpgrade kselftests-kmp-defaultUpgrade kernel-obs-qaUpgrade kernel-rt-develUpgrade kernel-syms-rtUpgrade kernel-symsUpgrade dtb-appleUpgrade gfs2-kmp-rtUpgrade dtb-armUpgrade kernel-devel-rtUpgrade dtb-exynosUpgrade gfs2-kmp-64kbUpgrade kernel-syms-azureUpgrade kernel-default-extraUpgrade kernel-64kb-develUpgrade kernel-kvmsmall-develUpgrade dtb-hisiliconUpgrade dtb-qcomUpgrade kernel-debug-develUpgrade kernel-debugUpgrade dtb-amlogicUpgrade dtb-freescaleUpgrade kernel-azure-vdsoUpgrade cluster-md-kmp-azureUpgrade kernel-default-vdsoUpgrade kernel-source-azureUpgrade dtb-amdUpgrade kernel-azure-develUpgrade cluster-md-kmp-defaultUpgrade dtb-lgUpgrade dtb-apmUpgrade kernel-default-develUpgrade kernel-rtUpgrade dlm-kmp-azureUpgrade dtb-mediatekUpgrade kernel-kvmsmallUpgrade dlm-kmp-defaultUpgrade kernel-rt-extraUpgrade kernel-source-vanillaUpgrade kernel-source-rtUpgrade kernel-defaultUpgrade kernel-debug-vdsoUpgrade kernel-docsUpgrade kernel-develUpgrade ocfs2-kmp-64kbUpgrade kernel-default-optionalUpgrade dtb-rockchipUpgrade ocfs2-kmp-defaultUpgrade kernel-rt-optionalUpgrade dtb-renesasUpgrade kernel-default-livepatch-develUpgrade kernel-azure-optionalUpgrade gfs2-kmp-defaultUpgrade cluster-md-kmp-64kbUpgrade reiserfs-kmp-rtUpgrade kernel-default-baseUpgrade cluster-md-kmp-rtUpgrade kernel-kvmsmall-vdsoUpgrade kselftests-kmp-azureUpgrade kernel-rt_debugUpgrade kernel-obs-buildUpgrade dtb-marvellUpgrade dtb-caviumUpgrade kernel-default-base-rebuildUpgrade dtb-nvidiaUpgrade kernel-rt-vdsoUpgrade kernel-azureUpgrade gfs2-kmp-azureUpgrade dtb-allwinnerUpgrade reiserfs-kmp-defaultUpgrade dtb-sprdUpgrade reiserfs-kmp-azureUpgrade dtb-alteraUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-rtUpgrade kernel-rt_debug-develUpgrade kernel-docs-htmlUpgrade kernel-64kb-extraUpgrade dtb-broadcomUpgrade dtb-socionextUpgrade dlm-kmp-rtUpgrade ocfs2-kmp-azure | Dec 5, 2025 | Jun 13, 2025 |
| Ubuntu | — | Upgrade linux-image-6.14.0-1007-raspiUpgrade linux-image-gcpUpgrade linux-image-6.14.0-22-genericUpgrade linux-image-6.14.0-1008-gcpUpgrade linux-image-6.14.0-1007-azureUpgrade linux-image-6.14.0-1007-awsUpgrade linux-image-oracleUpgrade linux-image-awsUpgrade linux-image-6.14.0-1007-aws-64kUpgrade linux-image-6.14.0-1004-realtimeUpgrade linux-image-azureUpgrade linux-image-azure-fdeUpgrade linux-image-oracle-64kUpgrade linux-image-realtimeUpgrade linux-image-gcp-64kUpgrade linux-image-genericUpgrade linux-image-aws-64kUpgrade linux-image-6.14.0-22-generic-64kUpgrade linux-image-6.14.0-1007-oracleUpgrade linux-image-generic-64kUpgrade linux-image-raspiUpgrade linux-image-6.14.0-1007-oracle-64kUpgrade linux-image-6.14.0-1008-gcp-64kUpgrade linux-image-6.14.0-1007-azure-fde | Jun 26, 2025 | May 1, 2025 |
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub