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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2025-68756— block: Use RCU in blk_mq_[un]quiesce_tagset() instead of set->tag_list_lock

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存在安全漏洞,该漏洞源于blk_mq_quiesce_tagset和blk_mq_unquiesce_tagset函数使用set->tag_list_lock互斥锁,可能导致死锁。

AI Predicted 7.8 Difficulty: Easy EPSS 0.19% · P8

Possible ATT&CK Techniques 1 AI

T1211 · Exploitation for Stealth

Affected Version Matrix 12

VendorProduct Version RangeStatus
Linux Linux 98d81f0df70ce6fc48517d938026e3c684b9051a< ca8764c0ea1fb825f17f19704af55e9e02c9f768 affected
98d81f0df70ce6fc48517d938026e3c684b9051a< 3baeec23a82e7ee9691f434c6ab0ab1387326108 affected
98d81f0df70ce6fc48517d938026e3c684b9051a< 6e8d363786765a81e35083e0909e076796468edf affected
98d81f0df70ce6fc48517d938026e3c684b9051a< ef0cd7b694928573f6569e61c14f5f059253162e affected
98d81f0df70ce6fc48517d938026e3c684b9051a< 59e25ef2b413c72da6686d431e7759302cfccafa affected
6.2 affected
< 6.2 unaffected
6.6.120≤ 6.6.* unaffected
… +4 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2025-68756

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
block: Use RCU in blk_mq_[un]quiesce_tagset() instead of set->tag_list_lock
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: block: Use RCU in blk_mq_[un]quiesce_tagset() instead of set->tag_list_lock blk_mq_{add,del}_queue_tag_set() functions add and remove queues from tagset, the functions make sure that tagset and queues are marked as shared when two or more queues are attached to the same tagset. Initially a tagset starts as unshared and when the number of added queues reaches two, blk_mq_add_queue_tag_set() marks it as shared along with all the queues attached to it. When the number of attached queues drops to 1 blk_mq_del_queue_tag_set() need to mark both the tagset and the remaining queues as unshared. Both functions need to freeze current queues in tagset before setting on unsetting BLK_MQ_F_TAG_QUEUE_SHARED flag. While doing so, both functions hold set->tag_list_lock mutex, which makes sense as we do not want queues to be added or deleted in the process. This used to work fine until commit 98d81f0df70c ("nvme: use blk_mq_[un]quiesce_tagset") made the nvme driver quiesce tagset instead of quiscing individual queues. blk_mq_quiesce_tagset() does the job and quiesce the queues in set->tag_list while holding set->tag_list_lock also. This results in deadlock between two threads with these stacktraces: __schedule+0x47c/0xbb0 ? timerqueue_add+0x66/0xb0 schedule+0x1c/0xa0 schedule_preempt_disabled+0xa/0x10 __mutex_lock.constprop.0+0x271/0x600 blk_mq_quiesce_tagset+0x25/0xc0 nvme_dev_disable+0x9c/0x250 nvme_timeout+0x1fc/0x520 blk_mq_handle_expired+0x5c/0x90 bt_iter+0x7e/0x90 blk_mq_queue_tag_busy_iter+0x27e/0x550 ? __blk_mq_complete_request_remote+0x10/0x10 ? __blk_mq_complete_request_remote+0x10/0x10 ? __call_rcu_common.constprop.0+0x1c0/0x210 blk_mq_timeout_work+0x12d/0x170 process_one_work+0x12e/0x2d0 worker_thread+0x288/0x3a0 ? rescuer_thread+0x480/0x480 kthread+0xb8/0xe0 ? kthread_park+0x80/0x80 ret_from_fork+0x2d/0x50 ? kthread_park+0x80/0x80 ret_from_fork_asm+0x11/0x20 __schedule+0x47c/0xbb0 ? xas_find+0x161/0x1a0 schedule+0x1c/0xa0 blk_mq_freeze_queue_wait+0x3d/0x70 ? destroy_sched_domains_rcu+0x30/0x30 blk_mq_update_tag_set_shared+0x44/0x80 blk_mq_exit_queue+0x141/0x150 del_gendisk+0x25a/0x2d0 nvme_ns_remove+0xc9/0x170 nvme_remove_namespaces+0xc7/0x100 nvme_remove+0x62/0x150 pci_device_remove+0x23/0x60 device_release_driver_internal+0x159/0x200 unbind_store+0x99/0xa0 kernfs_fop_write_iter+0x112/0x1e0 vfs_write+0x2b1/0x3d0 ksys_write+0x4e/0xb0 do_syscall_64+0x5b/0x160 entry_SYSCALL_64_after_hwframe+0x4b/0x53 The top stacktrace is showing nvme_timeout() called to handle nvme command timeout. timeout handler is trying to disable the controller and as a first step, it needs to blk_mq_quiesce_tagset() to tell blk-mq not to call queue callback handlers. The thread is stuck waiting for set->tag_list_lock as it tries to walk the queues in set->tag_list. The lock is held by the second thread in the bottom stack which is waiting for one of queues to be frozen. The queue usage counter will drop to zero after nvme_timeout() finishes, and this will not happen because the thread will wait for this mutex forever. Given that [un]quiescing queue is an operation that does not need to sleep, update blk_mq_[un]quiesce_tagset() to use RCU instead of taking set->tag_list_lock, update blk_mq_{add,del}_queue_tag_set() to use RCU safe list operations. Also, delete INIT_LIST_HEAD(&q->tag_set_list) in blk_mq_del_queue_tag_set() because we can not re-initialize it while the list is being traversed under RCU. The deleted queue will not be added/deleted to/from a tagset and it will be freed in blk_free_queue() after the end of RCU grace period.
Source: CVE Program / CVE List V5
CVSS Information
N/A
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存在安全漏洞,该漏洞源于blk_mq_quiesce_tagset和blk_mq_unquiesce_tagset函数使用set->tag_list_lock互斥锁,可能导致死锁。
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 98d81f0df70ce6fc48517d938026e3c684b9051a ~ ca8764c0ea1fb825f17f19704af55e9e02c9f768 -
Linux Linux 6.2 -

II. Public POCs for CVE-2025-68756

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

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2025-68756

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

Other References for CVE-2025-68756 (4)

Same Patch Batch · Linux · 2026-01-05 · 16 CVEs total

CVE-2025-68761 7.8 HIGH hfs: fix potential use after free in hfs_correct_next_unused_CNID()
CVE-2025-68764 7.8 HIGH NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags
CVE-2025-68753 7.1 HIGH ALSA: firewire-motu: add bounds check in put_user loop for DSP events
CVE-2025-68752 iavf: Implement settime64 with -EOPNOTSUPP
CVE-2025-68751 s390/fpu: Fix false-positive kmsan report in fpu_vstl()
CVE-2025-68754 rtc: amlogic-a4: fix double free caused by devm
CVE-2025-68755 staging: most: remove broken i2c driver
CVE-2025-68757 drm/vgem-fence: Fix potential deadlock on release
CVE-2025-68758 backlight: led-bl: Add devlink to supplier LEDs
CVE-2025-68759 wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring()
CVE-2025-68760 iommu/amd: Fix potential out-of-bounds read in iommu_mmio_show
CVE-2025-68762 net: netpoll: initialize work queue before error checks
CVE-2025-68763 crypto: starfive - Correctly handle return of sg_nents_for_len
CVE-2025-68765 mt76: mt7615: Fix memory leak in mt7615_mcu_wtbl_sta_add()
CVE-2025-68766 irqchip/mchp-eic: Fix error code in mchp_eic_domain_alloc()

IV. Related Vulnerabilities

V. Comments for CVE-2025-68756

No comments yet


Leave a comment