CVE-2026-64326
Beschrijving NL
In de Linux kernel is de volgende kwetsbaarheid verholpen:
block: sla sync_blockdev () over bij het verwijderen van verrassingen in bdev_mark_dead()
bdev_mark_dead()'s @surprise == true betekent dat het apparaat al weg is. Het bestandssysteem callback fs_bdev_mark_dead() eert dit en slaat over
sync_filesystem(), maar het bare block device path (no ->mark_dead op)
verloor zijn !verrassingswacht toen de houder ->mark_dead callback werd bedraad
omhoog (zie Oplossingen), en roept nu sync_blockdev () onvoorwaardelijk aan, wat kan
voor altijd wachten op terugschrijven dat niet langer kan worden voltooid. syzkaller raakte dit via nvme_reset_work() 's "I/O queues lost" pad:
nvme_mark_namespaces_dead() -> blk_mark_disk_dead() ->
bdev_mark_dead(bdev, true) -> sync_blockdev() blokkeert in
folio_wait_writeback(), waarbij de resetmedewerker wordt vastgezet en elke taak wacht
erop. Sla de synchronisatie over bij het verwijderen van verrassingen, overeenkomend met fs_bdev_mark_dead();
invalidate_bdev () wordt nog steeds uitgevoerd. Geordende verwijdering (verrassing == onwaar) is
ongewijzigd. Gevonden door FuzzNvme(Syzkaller met FEMU fuzzing framework).
Origineel (Engels) tonen
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).