Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

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

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于在rq_qos_wait和rq_qos_wake_function之间存在竞态条件,导致崩溃。

CVSS 7.8 · High EPSS 0.22% · P12

Affected Version Matrix 16

VendorProduct Version RangeStatus
Linux Linux 38cfb5a45ee013bfab5d1ae4c4738815e744b440< d04b72c9ef2b0689bfc1057d21c4aeed087c329f affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< 3bc6d0f8b70a9101456cf02ab99acb75254e1852 affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< 455a469758e57a6fe070e3e342db12e4a629e0eb affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< b5e900a3612b69423a0e1b0ab67841a1fb4af80f affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< 4c5b123ab289767afe940389dbb963c5c05e594e affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< 04f283fc16c8d5db641b6bffd2d8310aa7eccebc affected
38cfb5a45ee013bfab5d1ae4c4738815e744b440< e972b08b91ef48488bae9789f03cfedb148667fb affected
4.19 affected
… +8 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2024-50082

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
blk-rq-qos: fix crash on rq_qos_wait vs. rq_qos_wake_function race
Source: CVE Program / CVE List V5
Vulnerability 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().
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于在rq_qos_wait和rq_qos_wake_function之间存在竞态条件,导致崩溃。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux 38cfb5a45ee013bfab5d1ae4c4738815e744b440 ~ d04b72c9ef2b0689bfc1057d21c4aeed087c329f -
Linux Linux 4.19 -

II. Public POCs for CVE-2024-50082

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-50082

请登录查看更多情报信息。

Patches & Fixes for CVE-2024-50082 (6)

Same Patch Batch · Linux · 2024-10-29 · 21 CVEs total

CVE-2024-50086 9.8 CRITICAL ksmbd: fix user-after-free from session log off
CVE-2024-50085 9.8 CRITICAL mptcp: pm: fix UaF read in mptcp_pm_nl_rm_addr_or_subflow
CVE-2024-50075 8.0 HIGH xhci: tegra: fix checked USB2 port number
CVE-2024-50087 7.8 HIGH btrfs: fix uninitialized pointer free on read_alloc_one_name() error
CVE-2024-50073 7.8 HIGH tty: n_gsm: Fix use-after-free in gsm_cleanup_mux
CVE-2024-50074 7.8 HIGH parport: Proper fix for array out-of-bounds access
CVE-2024-50077 7.8 HIGH Bluetooth: ISO: Fix multiple init when debugfs is disabled
CVE-2024-50078 7.8 HIGH Bluetooth: Call iso_exit() on module unload
CVE-2024-50088 7.8 HIGH btrfs: fix uninitialized pointer free in add_inode_ref()
CVE-2024-50079 io_uring/sqpoll: ensure task state is TASK_RUNNING when running task_work
CVE-2024-50080 ublk: don't allow user copy for unprivileged device
CVE-2024-50081 blk-mq: setup queue ->tag_set before initializing hctx
CVE-2024-50076 vt: prevent kernel-infoleak in con_font_get()
CVE-2024-50083 tcp: fix mptcp DSS corruption due to large pmtu xmit
CVE-2024-50084 net: microchip: vcap api: Fix memory leaks in vcap_api_encode_rule_test()
CVE-2024-50072 x86/bugs: Use code segment selector for VERW operand
CVE-2024-50071 pinctrl: nuvoton: fix a double free in ma35_pinctrl_dt_node_to_map_func()
CVE-2024-50070 pinctrl: stm32: check devm_kasprintf() returned value
CVE-2024-50069 pinctrl: apple: check devm_kasprintf() returned value
CVE-2024-50068 mm/damon/tests/sysfs-kunit.h: fix memory leak in damon_sysfs_test_add_targets()

IV. Related Vulnerabilities

V. Comments for CVE-2024-50082

No comments yet


Leave a comment