Bug 2507027 (CVE-2026-64326) - CVE-2026-64326 kernel: block: skip sync_blockdev() on surprise removal in bdev_mark_dead()
Summary: CVE-2026-64326 kernel: block: skip sync_blockdev() on surprise removal in bde...
Keywords:
Status: NEW
Alias: CVE-2026-64326
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Product Security DevOps Team
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-07-25 10:01 UTC by OSIDB Bzimport
Modified: 2026-07-28 15:29 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2026-07-25 10:01:13 UTC
In the Linux kernel, the following vulnerability has been resolved:

block: skip sync_blockdev() on surprise removal in bdev_mark_dead()

bdev_mark_dead()'s @surprise == true means the device is already gone.
The filesystem callback fs_bdev_mark_dead() honours this and skips
sync_filesystem(), but the bare block device path (no ->mark_dead op)
lost its !surprise guard when the holder ->mark_dead callback was wired
up (see Fixes), and now calls sync_blockdev() unconditionally, which can
hang forever waiting on writeback that can no longer complete.

syzkaller hit this via nvme_reset_work()'s "I/O queues lost" path:
nvme_mark_namespaces_dead() -> blk_mark_disk_dead() ->
bdev_mark_dead(bdev, true) -> sync_blockdev() blocks in
folio_wait_writeback(), wedging the reset worker and every task waiting
on it.

Skip the sync on surprise removal, matching fs_bdev_mark_dead();
invalidate_bdev() still runs. Orderly removal (surprise == false) is
unchanged.

Found by FuzzNvme(Syzkaller with FEMU fuzzing framework).

Comment 1 Mauro Matteo Cascella 2026-07-28 15:26:55 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2026072512-CVE-2026-64326-8454@gregkh/T


Note You need to log in before you can comment on or make changes to this bug.