Odebrany

CVE-2026-97902

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

fs: nie zwracaj -EINVAL w celu pomyślnego odmrożenia zagnieżdżonego

Zatwierdź 7366f8b6fc6a („fs: obsłuż zamrażanie z wielu urządzeń”)
zastąpiono maskę bitową freeze_holders licznikami przypadającymi na posiadacza, aby zezwolić
zagnieżdżone zamarza. W wersji z maską bitową odwilż, która wypuściła plik udostępniony
przytrzymaj, podczas gdy inny posiadacz pozostał zwrócony 0. Od czasu przeróbki,
thaw_super_locked() usuwa odwołanie do zamrożenia poprzez freeze_dec(), ale
następnie zwraca -EINVAL, gdy pozostaną inne zamrażarki, wprowadzając w błąd
rozmówca: odwilż się powiodła, superblok po prostu pozostaje zamrożony
pozostali posiadacze.

Przerywa to zamrażanie inicjowane przez bdev. Kiedy system plików jest zamrożony
FIFREEZE i dodatkowo zamrożone przez bdev_freeze() -- która zagnieżdża się według
design, zobacz fs_bdev_freeze() -- odbierana jest kolejna bdev_thaw().
-EINVAL z operacji posiadacza, chociaż usunięto jego odniesienie do zamrożenia,
i dlatego utrzymuje podwyższony poziom bd_fsfreeze_count. Następnie mapowanie urządzeń
unlock_fs() ignoruje wartość zwracaną przez bdev_thaw(), więc nic nie zostaje zbilansowane
hrabia. Po FITHAW i umount użytkownika urządzenie blokowe może
nigdy więcej nie być montowane:

dm-1: Nie można zamontować, blockdev jest zawieszony

Przestrzeń użytkownika nie ma możliwości usunięcia liczby wycieków; tylko
zniszczenie urządzenia blokowego (lub ponowne uruchomienie) przywraca urządzenie.

Replikator (dowolne jądro od wersji 6.8):

dmsetup utwórz dut --table "0 $(blockdev --getsz "$DEV") linear $DEV 0"
mkfs.ext4 /dev/mapper/dut
zamontuj /dev/mapper/dut /mnt
fsfreeze --freeze /mnt # freeze_ucount == 1
dmsetup zawiesić dut # bd_fsfreeze_count == 1, ucount == 2
dmsetup wznów dut # ucount 2 -> 1, ale thaw_super()
# zwraca -EINVAL, więc bdev_thaw()
# utrzymuje bd_fsfreeze_count na poziomie 1
fsfreeze --unfreeze /mnt # system plików rozmraża się prawidłowo
ilość /mnt
mount /dev/mapper/dut /mnt # EBUSY, na zawsze

To samo dzieje się z fsfreeze przechowywanym w migawce LVM pliku
objętość pochodzenia.

Dokumentacja fs_bdev_thaw() opisuje już zamierzone działania
semantyka: „Jeśli ta funkcja zwraca zero, nie oznacza to, że
system plików nie został zamrożony, ponieważ mógł zostać zamrożony wiele razy”.
Przywróć je, zwracając 0, gdy zagnieżdżona odwilż przestanie działać
inne zamrażarki pozostają. Rozmrażanie bez zamrożenia nadal kończy się niepowodzeniem
z opcją -EINVAL, ponieważ funkcja may_unfreeze() odrzuca ten przypadek przed odwołaniem
liczba została dotknięta.

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org