CVE-2026-53061
Beschrijving NL
In de Linux kernel is de volgende kwetsbaarheid verholpen:
dm-cache: corrigeer vuile mappingcontrole in passthrough-modus schakelen
Zoals vermeld in commit 9b1cc9f251af ("dm cache: share cache-metadata
object in inactieve en actieve DM-tabellen "), dm-cache veronderstelde tabel
herladen treedt op na opschorting, terwijl LVM's tabelvoorbelasting dit breekt
veronderstelling. De vuile mappingcontrole voor passthrough-modus is ontworpen
rond deze veronderstelling en wordt uitgevoerd tijdens het maken van tabellen, waardoor
de controle om te mislukken met vooraf laden terwijl metadata-updates aan de gang zijn. Dit
riskeert het laden van vuile mappings in passthrough-modus, wat resulteert in gegevens
verlies. Stappen reproduceren:
1. Maak een writeback-cache met zero migration_threshold om te produceren
vuile toewijzingen
dmsetup create cmeta --tabel "0 8192 lineair /dev/sdc 0"
dmsetup cdata aanmaken --tabel "0 131072 linear /dev/sdc 8192"
dmsetup corig aanmaken --tabel "0 262144 lineair /dev/sdc 262144"
dd if=/dev/zero of =/dev/mapper/cmeta bs=4k aantal=1 oflag=direct
dmsetup cache aanmaken --tabel "0 262144 cache /dev/mapper/cmeta
/dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writeback smq
2 migratie_threshol d 0"
2. Een tabel vooraf laden in passthrough-modus
dmsetup herlaad cache --tabel "0 262144 cache /dev/mapper/cmeta
/dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
3. Schrijf naar het eerste cacheblok om het vuil te maken
fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k
--direct=1 --size=64k
4. Hervat de inactieve tabel. Nu is het mogelijk om het vuile blok te laden
naar de passthrough-modus. dmsetup hervatten cache
Fix door de controles naar de preresumafase te verplaatsen om de tabel te ondersteunen
voorladen. Verwijder ook de ongebruikte functie dm_cache_metadata_all_clean.
Origineel (Engels) tonen
In the Linux kernel, the following vulnerability has been resolved:
dm cache: fix dirty mapping checking in passthrough mode switching
As mentioned in commit 9b1cc9f251af ("dm cache: share cache-metadata
object across inactive and active DM tables"), dm-cache assumed table
reload occurs after suspension, while LVM's table preload breaks this
assumption. The dirty mapping check for passthrough mode was designed
around this assumption and is performed during table creation, causing
the check to fail with preload while metadata updates are ongoing. This
risks loading dirty mappings into passthrough mode, resulting in data
loss.
Reproduce steps:
1. Create a writeback cache with zero migration_threshold to produce
dirty mappings
dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta
/dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writeback smq
2 migration_threshold 0"
2. Preload a table in passthrough mode
dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta
/dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
3. Write to the first cache block to make it dirty
fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k
--direct=1 --size=64k
4. Resume the inactive table. Now it's possible to load the dirty block
into passthrough mode.
dmsetup resume cache
Fix by moving the checks to the preresume phase to support table
preloading. Also remove the unused function dm_cache_metadata_all_clean.