Ad

CVE-2026-72108

HIGH CVSS 3.1: 7,8 EPSS 0.17%
Обновлено 17 августа 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: Метаданные dm slim: исправлена непротиворечивость снимков метаданных при сбое фиксации. __reserve_metadata_snap() и __release_metadata_snap() изменяют Hold_root суперблока непосредственно в буфере block_manager. Если последующая фиксация метаданных не удалась, Hold_root сбрасывается на диск через путь abort_transaction, что приводит к противоречивым метаданным. Воспроизводитель 1: __reserve_metadata_snap() 1.

Создайте устройство метаданных размером 2 МБ и сделайте регион после 14-го числа. блок недоступен, чтобы вызвать сбой фиксации метаданных в последующая операция Reserve_metadata_snap. 14-й блок будет теневое место назначения для индексного блока. dmsetup create tmeta --table "0 112 линейный /dev/sdc 0 112 3984 ошибка" 2. Создайте тонкий пул размером 16 МБ. dmsetup создать tdata --table «0 32768 ноль» dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 тонкий пул /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1skip_block_zeroing" 3. Сделайте снимок метаданных, чтобы вызвать сбой фиксации метаданных и прерывание транзакции.

Однако, Hold_root записывается на диск, нарушение согласованности метаданных. сообщение dmsetup tpool 0 «reserve_metadata_snap» результат slim_check v1.2.2: Неверное количество ссылок для блока метаданных 6. Ожидается 2, но карта пространства содержит 1. Неверное количество ссылок для блока метаданных 7.

Ожидается 2, но карта пространства содержит 1. Неверное количество ссылок для блока метаданных 13. Ожидается 1, но карта пространства содержит 0.

Воспроизводитель 2: __release_metadata_snap() 1. Создайте устройство метаданных размером 2 МБ и сделайте регион после 16-го числа. блок недоступен, чтобы вызвать сбой фиксации метаданных в последующая операция Release_metadata_snap. 16-й блок будет теневое место назначения для индексного блока. dmsetup create tmeta --table "0 128 линейный /dev/sdc 0 128 3968 ошибка" 2. Создайте тонкий пул размером 16 МБ. dmsetup создать tdata --table «0 32768 ноль» dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 тонкий пул /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1skip_block_zeroing" 3.

Зарезервируйте, а затем опубликуйте снимок метаданных, чтобы активировать метаданные. ошибка фиксации и прерывание транзакции. Hold_root удаляется из суперблока на диске, что приводит к противоречивым метаданным. сообщение dmsetup tpool 0 «reserve_metadata_snap» сообщение dmsetup tpool 0 «release_metadata_snap» результат slim_check v1.2.2: Неверное количество ссылок для блока метаданных 6. Ожидается 1, но карта пространства содержит 2.

Неверное количество ссылок для блока метаданных 7. Ожидается 1, но карта пространства содержит 2. Утекли 1 блок метаданных.

Исправьте это, отложив обновление Hold_root до времени фиксации. Кроме того, переместите проверку существующего снимка в __reserve_metadata_snap. перед теневой операцией, чтобы избежать ненужной работы. В __release_metadata_snap, очистите pmd->held_root перед удалением btree, чтобы частичный сбой приводит к утечке блоков, а не к оставлению устаревшей ссылки, и разблокируйте блок моментальных снимков, прежде чем уменьшать его счетчик ссылок.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: dm thin metadata: fix metadata snapshot consistency on commit failure __reserve_metadata_snap() and __release_metadata_snap() modify the superblock's held_root directly in the block_manager's buffer. If the subsequent metadata commit fails, the held_root gets flushed to disk through the abort_transaction path, resulting in inconsistent metadata. Reproducer 1: __reserve_metadata_snap() 1. Create a 2 MiB metadata device and make the region after the 14th block inaccessible, to trigger metadata commit failure in the subsequent reserve_metadata_snap operation. The 14th block will be the shadow destination for the index block. dmsetup create tmeta --table "0 112 linear /dev/sdc 0 112 3984 error" 2. Create a 16 MiB thin-pool 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 skip_block_zeroing" 3. Take a metadata snapshot to trigger metadata commit failure and transaction abort. However, the held_root is written to disk, breaking metadata consistency. dmsetup message tpool 0 "reserve_metadata_snap" 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: __release_metadata_snap() 1. Create a 2 MiB metadata device and make the region after the 16th block inaccessible, to trigger metadata commit failure in the subsequent release_metadata_snap operation. The 16th block will be the shadow destination for the index block. dmsetup create tmeta --table "0 128 linear /dev/sdc 0 128 3968 error" 2. Create a 16 MiB thin-pool 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 skip_block_zeroing" 3. Reserve then release the metadata snapshot, to trigger metadata commit failure and transaction abort. The held_root gets removed from the on-disk superblock, causing inconsistent metadata. dmsetup message tpool 0 "reserve_metadata_snap" dmsetup message tpool 0 "release_metadata_snap" 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 __reserve_metadata_snap before the shadow operation to avoid unnecessary work. In __release_metadata_snap, clear pmd->held_root before btree deletion so partial failure leaks blocks rather than leaving a stale reference, and unlock the snapshot block before decrementing its refcount.

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1