In the Linux kernel, the following vulnerability has been resolved:
blk-rq-qos: fix crash on rq_qos_wait vs. rq_qos_wake_function race
We're seeing crashes from rq_qos_wake_function that look like this:
BUG: unable to handle page fault for address: ffffafe180a40084 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page PGD 100000067 P4D 100000067 PUD 10027c067 PMD 10115d067 PTE 0 Oops: Oops: 0002 [#1] PREEMPT SMP PTI CPU: 17 UID: 0 PID: 0 Comm: swapper/17 Not tainted 6.12.0-rc3-00013-geca631b8fe80 #11 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 RIP: 0010:_raw_spin_lock_irqsave+0x1d/0x40 Code: 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 0f 1f 44 00 00 41 54 9c 41 5c fa 65 ff 05 62 97 30 4c 31 c0 ba 01 00 00 00 <f0> 0f b1 17 75 0a 4c 89 e0 41 5c c3 cc cc cc cc 89 c6 e8 2c 0b 00 RSP: 0018:ffffafe180580ca0 EFLAGS: 00010046 RAX: 0000000000000000 RBX: ffffafe180a3f7a8 RCX: 0000000000000011 RDX: 0000000000000001 RSI: 0000000000000003 RDI: ffffafe180a40084 RBP: 0000000000000000 R08: 00000000001e7240 R09: 0000000000000011 R10: 0000000000000028 R11: 0000000000000888 R12: 0000000000000002 R13: ffffafe180a40084 R14: 0000000000000000 R15: 0000000000000003 FS: 0000000000000000(0000) GS:ffff9aaf1f280000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: ffffafe180a40084 CR3: 000000010e428002 CR4: 0000000000770ef0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 PKRU: 55555554 Call Trace: <IRQ> try_to_wake_up+0x5a/0x6a0 rq_qos_wake_function+0x71/0x80 __wake_up_common+0x75/0xa0 __wake_up+0x36/0x60 scale_up.part.0+0x50/0x110 wb_timer_fn+0x227/0x450 ...
So rq_qos_wake_function() calls wake_up_process(data->task), which calls try_to_wake_up(), which faults in raw_spin_lock_irqsave(&p->pi_lock).
p comes from data->task, and data comes from the waitqueue entry, which is stored on the waiter's stack in rq_qos_wait(). Analyzing the core dump with drgn, I found that the waiter had already woken up and moved on to a completely unrelated code path, clobbering what was previously data->task. Meanwhile, the waker was passing the clobbered garbage in data->task to wake_up_process(), leading to the crash.
What's happening is that in between rq_qos_wake_function() deleting the waitqueue entry and calling wake_up_process(), rq_qos_wait() is finding that it already got a token and returning. The race looks like this:
rq_qos_wait() rq_qos_wake_function() ============================================================== prepare_to_wait_exclusive() data->got_token = true; list_del_init(&curr->entry); if (data.got_token) break; finish_wait(&rqw->wait, &data.wq); ^- returns immediately because list_empty_careful(&wq_entry->entry) is true ... return, go do something else ... wake_up_process(data->task) (NO LONGER VALID!)-^
Normally, finish_wait() is supposed to synchronize against the waker. But, as noted above, it is returning immediately because the waitqueue entry has already been removed from the waitqueue.
The bug is that rq_qos_wake_function() is accessing the waitqueue entry AFTER deleting it. Note that autoremove_wake_function() wakes the waiter and THEN deletes the waitqueue entry, which is the proper order.
Fix it by swapping the order. We also need to use list_del_init_careful() to match the list_empty_careful() in finish_wait().
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-coreUpgrade kernel-rt-debug-coreUpgrade kernel-zfcpdump-develUpgrade bpftoolUpgrade kernel-debug-coreUpgrade kernel-modules-extraUpgrade kernel-rt-debug-develUpgrade kernel-rt-coreUpgrade kernel-rt-debugUpgrade kernel-debugUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-debug-modules-extraUpgrade kernel-debug-modulesUpgrade kernel-modulesUpgrade kernel-debug-develUpgrade kernel-tools-libsUpgrade kernel-zfcpdumpUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-develUpgrade kernel-rt-modulesUpgrade kernel-develUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-debug-modules-extraUpgrade kernel-docUpgrade kernel-cross-headersUpgrade kernel-zfcpdump-coreUpgrade kernel-toolsUpgrade kernel-rtUpgrade kernel-rt-modules-extraUpgrade perfUpgrade python3-perfUpgrade kernelUpgrade kernel-headersUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libs-devel | Dec 19, 2024 | Oct 29, 2024 |
| Amazon Linux Ami 2 | — | Upgrade perfUpgrade kernel-toolsUpgrade kernel-debuginfo-common-aarch64Upgrade bpftool-debuginfoUpgrade bpftoolUpgrade python-perfUpgrade kernel-develUpgrade kernelUpgrade kernel-livepatch-5.15.173-118.169Upgrade kernel-livepatch-5.10.228-219.884Upgrade perf-debuginfoUpgrade kernel-headersUpgrade kernel-tools-develUpgrade python-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-debuginfo | Mar 14, 2025 | Oct 29, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-develUpgrade python3-perfUpgrade kernel-develUpgrade kernel-tools-debuginfoUpgrade perfUpgrade kernel-livepatch-6.1.115-126.197Upgrade bpftoolUpgrade kernel-modules-extraUpgrade python3-perf-debuginfoUpgrade kernel-toolsUpgrade perf-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel-libbpfUpgrade bpftool-debuginfoUpgrade kernelUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-libbpf-develUpgrade kernel-debuginfoUpgrade kernel-headersUpgrade kernel-modules-extra-common | Mar 27, 2025 | Oct 29, 2024 |
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Nov 11, 2024 | Oct 29, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-tools-libsUpgrade kernelUpgrade bpftoolUpgrade python3-perfUpgrade kernel-toolsUpgrade kernel-abi-stablelists | Feb 11, 2025 | Oct 29, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernelUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade bpftoolUpgrade python3-perfUpgrade kernel-tools-libs | Feb 11, 2025 | Oct 29, 2024 |
| Oracle_linux | — | Upgrade kernelUpgrade kernel-uek | Dec 12, 2024 | Oct 29, 2024 |
| Redhat_linux | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Feb 10, 2025 | Oct 29, 2024 |
| Rocky_linux | — | Upgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-headersUpgrade kernelUpgrade kernel-toolsUpgrade kernel-debug-modules-extraUpgrade kernel-cross-headersUpgrade kernel-rtUpgrade kernel-rt-modules-extraUpgrade kernel-tools-libs-develUpgrade perf-debuginfoUpgrade kernel-modulesUpgrade kernel-debug-debuginfoUpgrade kernel-debug-modulesUpgrade python3-perfUpgrade bpftoolUpgrade kernel-develUpgrade perfUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-coreUpgrade kernel-debug-develUpgrade kernel-rt-kvmUpgrade kernel-debugUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-debugUpgrade kernel-rt-coreUpgrade bpftool-debuginfoUpgrade kernel-rt-debug-develUpgrade kernel-debuginfoUpgrade kernel-debug-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-tools-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-tools-libsUpgrade kernel-rt-develUpgrade kernel-rt-debug-kvmUpgrade kernel-modules-extra | Feb 5, 2026 | Dec 19, 2024 |
| Ubuntu | — | Upgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-ibmUpgrade linux-image-6.11.0-1010-lowlatencyUpgrade linux-image-5.15.0-1081-azure-fdeUpgrade linux-image-5.4.0-1143-gcpUpgrade linux-image-5.4.0-208-generic-lpaeUpgrade linux-image-6.11.0-1008-raspiUpgrade linux-image-5.15.0-133-genericUpgrade linux-image-5.15.0-1033-nvidia-tegra-rtUpgrade linux-image-aws-lts-20.04Upgrade linux-image-6.8.0-1025-azureUpgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1024-nvidia-64kUpgrade linux-image-genericUpgrade linux-image-intel-iotgUpgrade linux-image-oem-20.04bUpgrade linux-image-oracle-64kUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-intelUpgrade linux-image-azure-nvidiaUpgrade linux-image-6.11.0-1009-azure-fdeUpgrade linux-image-gcp-64kUpgrade linux-image-5.4.0-1138-oracleUpgrade linux-image-5.15.0-1073-intel-iotgUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-lowlatencyUpgrade linux-image-5.15.0-1072-raspiUpgrade linux-image-6.8.0-1024-nvidiaUpgrade linux-image-5.4.0-1142-awsUpgrade linux-image-oem-22.04aUpgrade linux-image-6.8.0-1025-awsUpgrade linux-image-generic-64kUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-raspiUpgrade linux-image-6.8.0-56-genericUpgrade linux-image-5.15.0-1033-nvidia-tegraUpgrade linux-image-aws-lts-22.04Upgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-6.8.0-1024-nvidia-lowlatency-64kUpgrade linux-image-azure-lts-20.04Upgrade linux-image-oem-osp1Upgrade linux-image-5.15.0-133-generic-lpaeUpgrade linux-image-5.15.0-1021-nvidia-tegra-igx-rtUpgrade linux-image-6.8.0-1008-gkeopUpgrade linux-image-6.8.0-1025-azure-fdeUpgrade linux-image-nvidia-tegraUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-5.4.0-1099-bluefieldUpgrade linux-image-generic-lpaeUpgrade linux-image-oem-20.04dUpgrade linux-image-6.8.0-1022-oracle-64kUpgrade linux-image-6.11.0-1009-awsUpgrade linux-image-6.8.0-56-lowlatencyUpgrade linux-image-5.4.0-1129-raspiUpgrade linux-image-5.4.0-1058-xilinx-zynqmpUpgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-azure-fdeUpgrade linux-image-5.15.0-1074-ibmUpgrade linux-image-azure-lts-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-5.15.0-1076-kvmUpgrade linux-image-gkeop-6.8Upgrade linux-image-azureUpgrade linux-image-5.4.0-208-genericUpgrade linux-image-6.11.0-1011-oracleUpgrade linux-image-5.15.0-133-generic-64kUpgrade linux-image-6.11.0-18-genericUpgrade linux-image-oem-20.04cUpgrade linux-image-oem-22.04Upgrade linux-image-6.11.0-1009-azureUpgrade linux-image-5.15.0-1021-nvidia-tegra-igxUpgrade linux-image-5.4.0-1086-ibmUpgrade linux-image-azure-lts-24.04Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-ibm-lts-20.04Upgrade linux-image-gkeopUpgrade linux-image-raspi2Upgrade linux-image-nvidiaUpgrade linux-image-oem-24.04aUpgrade linux-image-realtime-hwe-24.04Upgrade linux-image-6.8.0-1022-oracleUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-gke-5.15Upgrade linux-image-6.11.0-18-generic-64kUpgrade linux-image-5.15.0-1081-azureUpgrade linux-image-lowlatency-64kUpgrade linux-image-ibm-classicUpgrade linux-image-6.11.0-1015-oemUpgrade linux-image-oem-22.04cUpgrade linux-image-6.11.0-1011-oracle-64kUpgrade linux-image-6.8.0-1014-azure-nvidiaUpgrade linux-image-5.15.0-1077-gcpUpgrade linux-image-5.15.0-1072-nvidia-lowlatencyUpgrade linux-image-5.15.0-1060-gkeopUpgrade linux-image-gcp-lts-24.04Upgrade linux-image-gcp-lts-22.04Upgrade linux-image-6.8.0-1026-gcpUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-fipsUpgrade linux-image-gkeop-5.15Upgrade linux-image-6.8.0-2023-raspi-realtimeUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-aws-lts-24.04Upgrade linux-image-xilinx-zynqmpUpgrade linux-image-6.8.0-1028-raspiUpgrade linux-image-5.15.0-134-genericUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-5.15.0-1075-gkeUpgrade linux-image-gkeUpgrade linux-image-virtualUpgrade linux-image-bluefieldUpgrade linux-image-awsUpgrade linux-image-6.8.0-57-genericUpgrade linux-image-5.4.0-1048-iotUpgrade linux-image-6.8.0-1021-gkeUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-22.04dUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1027-awsUpgrade linux-image-6.8.0-1026-gcp-64kUpgrade linux-image-5.15.0-1080-awsUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-5.4.0-1127-kvmUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-5.15.0-1070-ibmUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-5.15.0-1072-nvidiaUpgrade linux-image-5.4.0-1116-fipsUpgrade linux-image-oracleUpgrade linux-image-6.11.0-1005-realtimeUpgrade linux-image-6.8.0-57-generic-64kUpgrade linux-image-nvidia-tegra-igx-rtUpgrade linux-image-6.8.1-1018-realtimeUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-raspi-hwe-18.04Upgrade linux-image-6.8.0-56-generic-64kUpgrade linux-image-oem-20.04Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-5.15.0-134-generic-lpaeUpgrade linux-image-5.15.0-134-generic-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-6.11.0-1009-gcpUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-133-lowlatencyUpgrade linux-image-raspi-realtimeUpgrade linux-image-5.4.0-1140-awsUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-gcpUpgrade linux-image-kvmUpgrade linux-image-6.8.0-56-lowlatency-64kUpgrade linux-image-raspi-nolpaeUpgrade linux-image-6.8.0-1024-oemUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-azure-cvmUpgrade linux-image-6.8.0-1022-ibmUpgrade linux-image-5.15.0-1078-awsUpgrade linux-image-6.8.0-1024-nvidia-lowlatencyUpgrade linux-image-realtimeUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-6.11.0-1010-lowlatency-64kUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-5.15.0-1075-oracleUpgrade linux-image-nvidia-tegra-igxUpgrade linux-image-oem-22.04bUpgrade linux-image-5.4.0-208-lowlatencyUpgrade linux-image-5.4.0-1145-azureUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-5.15.0-133-lowlatency-64kUpgrade linux-image-oemUpgrade linux-image-oem-24.04bUpgrade linux-image-5.15.0-1044-xilinx-zynqmp | Feb 20, 2025 | Oct 29, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | Oct 29, 2024 |
Prioritise with Active Threat Intelligence
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