Ad

CVE-2026-89645

NONE EPSS 0.22%
Обновлено 11 сентября 2026
Linux
Параметр Значение
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: btrfs: удалять восстановленные корневые ссылки перемещения при сбое восстановления. Во время восстановления перемещения каждый корень фс получает ссылку на свое перемещение. корень. Если загрузка или добавление более позднего корня не удалась или если первая транзакция фиксация не удалась, btrfs_recover_relocation() переходит к out_unset раньше merge_reloc_roots() и clean_dirty_subvols(). put_reloc_control() удаляет корневые ссылки перемещения, принадлежащие списку, но не очищает fs_root->reloc_root и не удаляет ссылки, принадлежащие им. указатели.

Очистка монтирования удаляет их только тогда, когда установлен BTRFS_FS_ERROR, поэтому ошибка, такая как -ENOMEM, при обработке более позднего корня может оставить ссылки позади. Сохраняйте временные ссылки на корни фс, связанные во время восстановления. Вкл. сбой, очистите их указатели reloc_root и удалите соответствующие ссылки.

После успешной фиксации первой транзакции удалите только временные корневые ссылки fs и позвольте обычным путям слияния и очистки обрабатывать корни перемещения. Внедрение ошибки в образе, ожидающем перемещения, подтвердило наличие пробела в очистке. Из-за введенного сбоя первой фиксации корни 25 фс имели reloc_root, установленный с фс_ошибка = 0.

Благодаря этому исправлению тот же путь сбоя снижается до 0. прежде чем монтирование не удастся.

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

In the Linux kernel, the following vulnerability has been resolved: btrfs: drop recovered reloc root refs on recovery failure During relocation recovery, each fs root gets a reference to its relocation root. If loading or adding a later root fails, or if the first transaction commit fails, btrfs_recover_relocation() jumps to out_unset before merge_reloc_roots() and clean_dirty_subvols(). put_reloc_control() drops the list-owned relocation root references, but it does not clear fs_root->reloc_root or drop the references owned by those pointers. Mount cleanup only drops them when BTRFS_FS_ERROR is set, so an error such as -ENOMEM while processing a later root can leave references behind. Keep temporary references to the fs roots associated during recovery. On failure, clear their reloc_root pointers and drop the corresponding references. Once the first transaction commit succeeds, drop only the temporary fs root references and let the normal merge and cleanup paths handle the relocation roots. Fault injection on a pending-relocation image confirmed the cleanup gap. With an injected first-commit failure, 25 fs roots had reloc_root set with fs_error=0. With this fix, the same failure path drops that count to 0 before mount fails.