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