Vulnerability · Published Oct 29, 2024 · Assigned by Linux

CVE-2024-50082blk-rq-qos: fix crash on rq_qos_wait vs. rq_qos_wake_function race

High 7.8

In plain English

A high-severity security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.2% (higher than 13% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.

Severity (CVSS 3.1)7.8High
Exploit odds (30 days)0.2%top 86.9% of all CVEs
Exploited in the wildNo reportsCISA SSVC: none
Attack toolingNoneno public tooling known

Official description

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().

Affected packages & fixed versions

EcosystemPackageFixed inAdvisory
AlmaLinux:8bpftool4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-abi-stablelists4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-core4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-cross-headers4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-debug4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-debug-core4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-debug-devel4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-debug-modules4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-debug-modules-extra4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-devel4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-doc4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-headers4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-modules4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-modules-extra4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-rt4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-core4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-debug4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-debug-core4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-debug-devel4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-debug-modules4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-debug-modules-extra4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-devel4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-modules4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-rt-modules-extra4.18.0-553.32.1.rt7.373.el8_10ALSA-2024:10944
AlmaLinux:8kernel-tools4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-tools-libs4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-tools-libs-devel4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-zfcpdump4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-zfcpdump-core4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-zfcpdump-devel4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-zfcpdump-modules4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8kernel-zfcpdump-modules-extra4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8perf4.18.0-553.32.1.el8_10ALSA-2024:10943
AlmaLinux:8python3-perf4.18.0-553.32.1.el8_10ALSA-2024:10943
Debian:12linux6.1.115-1DEBIAN-CVE-2024-50082
Debian:13linux6.11.5-1DEBIAN-CVE-2024-50082
Debian:14linux6.11.5-1DEBIAN-CVE-2024-50082
Rocky Linux:8kernel0:4.18.0-553.32.1.el8_10RLSA-2024:10943
Rocky Linux:8kernel-rt0:4.18.0-553.32.1.rt7.373.el8_10RLSA-2024:10944
Ubuntu:22.04:LTSlinux5.15.0-133.144UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux5.15.0-133.144USN-7288-1
Ubuntu:24.04:LTSlinux6.8.0-56.58UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-allwinner-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-aws5.15.0-1078.85USN-7308-1
Ubuntu:22.04:LTSlinux-aws5.15.0-1078.85UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-aws6.8.0-1025.27UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-aws-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-aws-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-aws-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1027.29~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure5.15.0-1081.90USN-7289-1
Ubuntu:22.04:LTSlinux-azure5.15.0-1081.90UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-azure6.8.0-1025.30UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-azure-6.116.11.0-1012.12~24.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1025.30~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-fde5.15.0-1081.90.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-fde5.15.0-1081.90.1USN-7289-1
Ubuntu:22.04:LTSlinux-azure-fde-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-azure-fde-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-azure-nvidia6.8.0-1014.15UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp5.15.0-1077.86UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp5.15.0-1077.86USN-7291-1
Ubuntu:24.04:LTSlinux-gcp6.8.0-1026.28UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-gcp-6.116.11.0-1011.11~24.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1026.28~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gke5.15.0-1075.81USN-7291-1
Ubuntu:22.04:LTSlinux-gke5.15.0-1075.81UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-gke6.8.0-1021.25UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-gkeop5.15.0-1060.68USN-7289-1
Ubuntu:22.04:LTSlinux-gkeop5.15.0-1060.68UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1008.10UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-hwe-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-hwe-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-hwe-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-57.59~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-ibm5.15.0-1070.73USN-7289-3
Ubuntu:22.04:LTSlinux-ibm5.15.0-1070.73UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-ibm6.8.0-1022.22UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-ibm-6.86.8.0-1023.23~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-intel-iotg5.15.0-1073.79UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-intel-iotg5.15.0-1073.79USN-7289-4
Ubuntu:22.04:LTSlinux-kvm5.15.0-1076.81UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-kvm5.15.0-1076.81USN-7388-1
Ubuntu:22.04:LTSlinux-lowlatency5.15.0-133.143UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-lowlatency5.15.0-133.143USN-7288-1
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-56.58.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-lowlatency-hwe-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-56.58.1~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia5.15.0-1072.73UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia5.15.0-1072.73USN-7289-1
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1024.27UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-nvidia-6.116.11.0-1007.7UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1024.27~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1024.27.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia-tegra5.15.0-1033.33USN-7389-1
Ubuntu:22.04:LTSlinux-nvidia-tegra5.15.0-1033.33UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-nvidia-tegra6.8.0-1004.4UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-nvidia-tegra-igx5.15.0-1021.21USN-7389-1
Ubuntu:22.04:LTSlinux-nvidia-tegra-igx5.15.0-1021.21UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oem-5.17no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oem-6.0no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oem-6.1no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-oem-6.116.11.0-1015.15UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oem-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1024.24UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oracle5.15.0-1075.81USN-7289-1
Ubuntu:22.04:LTSlinux-oracle5.15.0-1075.81UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-oracle6.8.0-1022.23UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oracle-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1022.23~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-raspi5.15.0-1072.75UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-raspi5.15.0-1072.75USN-7305-1
Ubuntu:24.04:LTSlinux-raspi6.8.0-1028.32UBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-raspi-realtimeno fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-riscv6.8.0-56.58.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-riscv-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-riscv-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-riscv-6.86.8.0-56.58.1~22.04.1UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-starfive-5.19no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-starfive-6.2no fix listedUBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-starfive-6.5no fix listedUBUNTU-CVE-2024-50082
Ubuntu:24.04:LTSlinux-xilinx6.8.0-1017.18UBUNTU-CVE-2024-50082
Ubuntu:22.04:LTSlinux-xilinx-zynqmp5.15.0-1044.48USN-7390-1
Ubuntu:22.04:LTSlinux-xilinx-zynqmp5.15.0-1044.48UBUNTU-CVE-2024-50082

Affected products (as reported)

VendorProductVersions
Linux Linux 38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before d04b72c9ef2b0689bfc1057d21c4aeed087c329f38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before 3bc6d0f8b70a9101456cf02ab99acb75254e185238cfb5a45ee013bfab5d1ae4c4738815e744b440 – before 455a469758e57a6fe070e3e342db12e4a629e0eb38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before b5e900a3612b69423a0e1b0ab67841a1fb4af80f38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before 4c5b123ab289767afe940389dbb963c5c05e594e38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before 04f283fc16c8d5db641b6bffd2d8310aa7eccebc38cfb5a45ee013bfab5d1ae4c4738815e744b440 – before e972b08b91ef48488bae9789f03cfedb148667fb
Linux Linux 4.19

References