In the Linux kernel, the following vulnerability has been resolved:
dm thin metadata: fix metadata snapshot consistency on commit failure
__reservemetadatasnap() and __releasemetadatasnap() modify the superblock's heldroot directly in the blockmanager's buffer. If the subsequent metadata commit fails, the heldroot gets flushed to disk through the aborttransaction path, resulting in inconsistent metadata.
Reproducer 1: __reservemetadatasnap()
dmsetup create tmeta --table "0 112 linear /dev/sdc 0 112 3984 error"
dmsetup create tdata --table "0 32768 zero" dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1 skipblockzeroing"
dmsetup message tpool 0 "reservemetadatasnap"
thin_check v1.2.2 result:
Bad reference count for metadata block 6. Expected 2, but space map contains 1. Bad reference count for metadata block 7. Expected 2, but space map contains 1. Bad reference count for metadata block 13. Expected 1, but space map contains 0.
Reproducer 2: __releasemetadatasnap()
dmsetup create tmeta --table "0 128 linear /dev/sdc 0 128 3968 error"
dmsetup create tdata --table "0 32768 zero" dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1 skipblockzeroing"
dmsetup message tpool 0 "reservemetadatasnap" dmsetup message tpool 0 "releasemetadatasnap"
thin_check v1.2.2 result:
Bad reference count for metadata block 6. Expected 1, but space map contains 2. Bad reference count for metadata block 7. Expected 1, but space map contains 2. 1 metadata blocks have leaked.
Fix by deferring the held_root update to commit time.
Additionally, move the existing-snapshot check in __reservemetadatasnap before the shadow operation to avoid unnecessary work. In _releasemetadatasnap, clear pmd->heldroot before btree deletion so partial failure leaks blocks rather than leaving a stale reference, and unlock the snapshot block before decrementing its refcount.
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72108.json"
}