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-zfcpdump-develUpgrade kernel-coreUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-debug-develUpgrade kernel-rt-develUpgrade kernel-debugUpgrade kernel-rt-debug-develUpgrade kernel-modulesUpgrade kernel-rt-modulesUpgrade kernel-develUpgrade kernel-rt-coreUpgrade kernel-debug-coreUpgrade bpftoolUpgrade kernel-modules-extraUpgrade kernel-rt-debug-coreUpgrade kernel-rt-debugUpgrade kernel-debug-modules-extraUpgrade kernel-debug-modulesUpgrade kernel-tools-libsUpgrade kernel-rt-debug-modulesUpgrade python3-perfUpgrade kernel-tools-libs-develUpgrade perfUpgrade kernel-docUpgrade kernelUpgrade kernel-cross-headersUpgrade kernel-abi-stablelistsUpgrade kernel-zfcpdump-coreUpgrade kernel-rtUpgrade kernel-toolsUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernel-headersUpgrade kernel-rt-modules-extra | Dec 19, 2024 | Oct 29, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-debuginfo-common-x86_64Upgrade python-perf-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade kernelUpgrade kernel-livepatch-5.15.173-118.169Upgrade kernel-tools-debuginfoUpgrade kernel-livepatch-5.10.228-219.884Upgrade kernel-headersUpgrade bpftoolUpgrade kernel-develUpgrade python-perfUpgrade perfUpgrade kernel-debuginfo-common-aarch64Upgrade bpftool-debuginfoUpgrade kernel-tools | Mar 14, 2025 | Oct 29, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-tools-develUpgrade python3-perfUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-develUpgrade perfUpgrade bpftoolUpgrade kernel-modules-extraUpgrade python3-perf-debuginfoUpgrade kernel-livepatch-6.1.115-126.197Upgrade kernel-toolsUpgrade kernel-tools-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-modules-extra-commonUpgrade kernel-headersUpgrade kernel-debuginfoUpgrade perf-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-libbpf-staticUpgrade kernel-libbpfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel | Mar 27, 2025 | Oct 29, 2024 |
| Debian | — | Upgrade linux-6.1Upgrade linux | Nov 11, 2024 | Oct 29, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernel | Feb 11, 2025 | Oct 29, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade python3-perfUpgrade bpftoolUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernelUpgrade kernel-abi-stablelists | Feb 11, 2025 | Oct 29, 2024 |
| Oracle_linux | — | Upgrade kernel-uekUpgrade kernel | Dec 12, 2024 | Oct 29, 2024 |
| Redhat_linux | — | Upgrade kernel-rtNo solution existsUpgrade kernel | Feb 10, 2025 | Oct 29, 2024 |
| Rocky_linux | — | Upgrade kernel-debug-debuginfoUpgrade kernel-modules-extraUpgrade kernel-rt-develUpgrade python3-perfUpgrade kernel-coreUpgrade kernel-debugUpgrade kernel-rt-debugUpgrade kernel-modulesUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debug-kvmUpgrade bpftoolUpgrade kernel-debug-develUpgrade kernel-debug-modulesUpgrade kernel-tools-debuginfoUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debuginfoUpgrade kernel-debug-coreUpgrade perfUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-develUpgrade kernel-tools-libsUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-coreUpgrade bpftool-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-rt-kvmUpgrade kernel-rt-modulesUpgrade perf-debuginfoUpgrade kernel-tools-libs-develUpgrade kernel-rt-modules-extraUpgrade kernel-toolsUpgrade kernel-headersUpgrade kernel-cross-headersUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debuginfoUpgrade kernelUpgrade kernel-rtUpgrade kernel-debuginfo-common-x86_64 | Feb 5, 2026 | Dec 19, 2024 |
| Ubuntu | — | Upgrade linux-image-5.15.0-1033-nvidia-tegraUpgrade linux-image-6.8.0-1024-nvidia-lowlatency-64kUpgrade linux-image-5.15.0-1076-kvmUpgrade linux-image-oem-20.04dUpgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-5.15.0-133-genericUpgrade linux-image-5.15.0-1081-azure-fdeUpgrade linux-image-6.11.0-1011-oracle-64kUpgrade linux-image-5.15.0-1073-intel-iotgUpgrade linux-image-5.4.0-1138-oracleUpgrade linux-image-oem-22.04cUpgrade linux-image-gcp-64kUpgrade linux-image-5.4.0-1058-xilinx-zynqmpUpgrade linux-image-aws-lts-20.04Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-nvidia-tegraUpgrade linux-image-nvidiaUpgrade linux-image-gkeop-6.8Upgrade linux-image-5.15.0-1074-ibmUpgrade linux-image-6.11.0-1009-azureUpgrade linux-image-6.8.0-1025-azure-fdeUpgrade linux-image-6.8.0-1025-azureUpgrade linux-image-azure-nvidiaUpgrade linux-image-6.11.0-18-generic-64kUpgrade linux-image-6.8.0-56-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-azure-lts-20.04Upgrade linux-image-raspiUpgrade linux-image-nvidia-64kUpgrade linux-image-6.11.0-1011-oracleUpgrade linux-image-aws-lts-22.04Upgrade linux-image-azureUpgrade linux-image-intelUpgrade linux-image-6.8.0-1022-oracle-64kUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-6.8.0-1024-nvidia-64kUpgrade linux-image-6.11.0-1009-awsUpgrade linux-image-ibmUpgrade linux-image-6.11.0-18-genericUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-56-genericUpgrade linux-image-5.4.0-1099-bluefieldUpgrade linux-image-oem-22.04Upgrade linux-image-5.15.0-133-generic-lpaeUpgrade linux-image-5.15.0-1021-nvidia-tegra-igx-rtUpgrade linux-image-intel-iotgUpgrade linux-image-oem-osp1Upgrade linux-image-lowlatencyUpgrade linux-image-generic-64kUpgrade linux-image-genericUpgrade linux-image-6.8.0-1024-nvidiaUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-oem-22.04aUpgrade linux-image-6.11.0-1008-raspiUpgrade linux-image-6.8.0-1014-azure-nvidiaUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.15.0-1072-raspiUpgrade linux-image-6.11.0-1010-lowlatencyUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-6.8.0-1008-gkeopUpgrade linux-image-lowlatency-64kUpgrade linux-image-gkeopUpgrade linux-image-azure-lts-24.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-ibm-classicUpgrade linux-image-generic-lpaeUpgrade linux-image-azure-lts-22.04Upgrade linux-image-5.15.0-1021-nvidia-tegra-igxUpgrade linux-image-gke-5.15Upgrade linux-image-5.15.0-1033-nvidia-tegra-rtUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-5.15.0-133-generic-64kUpgrade linux-image-5.4.0-1129-raspiUpgrade linux-image-oracle-64kUpgrade linux-image-5.4.0-208-genericUpgrade linux-image-6.8.0-1022-oracleUpgrade linux-image-oem-24.04aUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-5.4.0-208-generic-lpaeUpgrade linux-image-6.11.0-1009-azure-fdeUpgrade linux-image-oem-20.04cUpgrade linux-image-raspi2Upgrade linux-image-realtime-hwe-24.04Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-5.4.0-1142-awsUpgrade linux-image-5.15.0-1081-azureUpgrade linux-image-5.4.0-1143-gcpUpgrade linux-image-oem-20.04bUpgrade linux-image-6.11.0-1015-oemUpgrade linux-image-6.8.0-1025-awsUpgrade linux-image-5.4.0-1086-ibmUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-aws-lts-24.04Upgrade linux-image-5.4.0-1145-azureUpgrade linux-image-5.15.0-1075-oracleUpgrade linux-image-5.15.0-134-generic-lpaeUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-virtualUpgrade linux-image-nvidia-tegra-igxUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-kvmUpgrade linux-image-6.11.0-1010-lowlatency-64kUpgrade linux-image-5.15.0-134-generic-64kUpgrade linux-image-6.8.0-2023-raspi-realtimeUpgrade linux-image-azure-cvmUpgrade linux-image-raspi-nolpaeUpgrade linux-image-nvidia-6.8Upgrade linux-image-raspi-realtimeUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-gkeop-5.15Upgrade linux-image-generic-hwe-18.04Upgrade linux-image-6.8.0-56-generic-64kUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-5.15.0-134-genericUpgrade linux-image-5.15.0-133-lowlatencyUpgrade linux-image-5.15.0-1072-nvidiaUpgrade linux-image-5.15.0-1075-gkeUpgrade linux-image-oracleUpgrade linux-image-oem-24.04bUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-6.8.0-1021-gkeUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.8.0-57-genericUpgrade linux-image-6.11.0-1009-gcpUpgrade linux-image-6.8.1-1018-realtimeUpgrade linux-image-nvidia-tegra-igx-rtUpgrade linux-image-oemUpgrade linux-image-5.4.0-1140-awsUpgrade linux-image-6.8.0-57-generic-64kUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-6.11.0-1005-realtimeUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-oem-20.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-realtimeUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-6.8.0-1024-nvidia-lowlatencyUpgrade linux-image-6.8.0-1024-oemUpgrade linux-image-6.8.0-56-lowlatency-64kUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-5.15.0-1077-gcpUpgrade linux-image-5.15.0-1078-awsUpgrade linux-image-5.15.0-1072-nvidia-lowlatencyUpgrade linux-image-6.8.0-1022-ibmUpgrade linux-image-5.15.0-1070-ibmUpgrade linux-image-awsUpgrade linux-image-gcp-lts-24.04Upgrade linux-image-oem-22.04bUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-bluefieldUpgrade linux-image-5.4.0-1048-iotUpgrade linux-image-5.15.0-1060-gkeopUpgrade linux-image-oem-24.04Upgrade linux-image-fipsUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-gkeUpgrade linux-image-oem-22.04dUpgrade linux-image-6.8.0-1028-raspiUpgrade linux-image-6.8.0-1027-awsUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-gcp-lts-20.04Upgrade linux-image-6.8.0-1026-gcp-64kUpgrade linux-image-5.4.0-208-lowlatencyUpgrade linux-image-5.4.0-1127-kvmUpgrade linux-image-5.4.0-1116-fipsUpgrade linux-image-5.15.0-133-lowlatency-64kUpgrade linux-image-5.15.0-1080-awsUpgrade linux-image-5.15.0-1044-xilinx-zynqmpUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-gcpUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-6.8.0-1026-gcp | 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