Odebrany

CVE-2026-98996

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 odmontowuj po cichu zajętych wierzchowców

Pomocnik propagate_mount_busy() służy do decydowania, czy połączenie jest synchroniczne
może się udać. Czyni to poprzez przeglądanie kopii ofiar w aktach
montuje, do którego propaguje się jego rodzic. Jedna z tych funkcji z propagacji
piekło.

Pomija kopię, która ma wierzchowce podrzędne, z wyjątkiem przypadku pojedynczego
uchwyt podrzędny zakrywający katalog główny kopii. Algorytm ten był dokładny.
Już nie jest.

Pierwotnie podczas propagacji odmontowywano tylko kopie bezdzietne.
I 1064f874abc0 („mnt: Tuck montuje się pod innymi, zamiast tworzyć
mocowania cieniowe/boczne.”) zakończyło się dodaniem zakrytych uchwytów po obu stronach
jedno podejście.

Przyszedł 99b19d16471e („mnt: W uchwycie propgate_umount odwiedzanie wierzchowców
w dowolnej kolejności”) i zaczęło się odmontowywać więcej niż wcześniej:

[1]: Kopia wierzchowca jest odmontowywana, gdy każde z jej dzieci jest albo
jego wierzchołek lub kopię samej ofiary. W pierwszym przypadku
Overmount zostaje naprawiony. W tym drugim przypadku kopia
ofiara zostanie odmontowana.

Zatem propagate_umount() zostało przepisane bez dostosowywania
propagate_mount_busy(). A obecnie propagate_mount_busy() nie
spójrz na kopie ofiary, które mają dwoje lub więcej dzieci, ani jedno
dziecko, które nie jest przesadą.

Zatem żadna taka kopia w [1] nie jest sprawdzana
referencje. W rezultacie synchroniczne odmontowanie powiedzie się, ciągnąc
z uchwytu, który jest nadal w użyciu.

Kontener może na to wpaść z własnymi wierzchowcami. Gospodarz udostępnia a
drzewo z kontenerem, a host ma wierzchowca w tym drzewie:

mount -t tmpfs brak /mnt
mount --make-shared /mnt
mount -t tmpfs brak /mnt/a

/mnt kontenera jest podrzędną kopią podłączenia hosta. Pojemnik
teraz bierze oddzielną kopię drzewa i montuje ją pod nią
propaguje kopię /mnt/a i utrzymuje deskryptor pliku w drzewie
otwarte:

unshare -m --propagation bez zmian
mount --make-rslave /
fd = open_tree(AT_FDCWD, "/mnt", OPEN_TREE_CLONE | AT_RECURSIVE)
move_mount(fd, "", AT_FDCWD, "/mnt/a", MOVE_MOUNT_BENEATH)

grep /mnt /proc/self/mountinfo
775 355 ... /mnt ... master:646
777 775 ... /mnt/a ... mistrz:646
776 777 ... /mnt/a ... mistrz:647
778 777 ... /mnt/a/a ... mistrz:647

Dołączone drzewo (777) jest teraz zamontowane pod kopią kontenera
z /mnt/a. Tam też znajduje się uchwyt hosta (jak widać z hosta
montuj przestrzeń nazw). Zatem propagowana kopia (776) wierzchowca hosta jest włączona
na górze swojego korzenia, a jego kopia (778) znajduje się w nim. Teraz gospodarz
biegnie:

ilość /mnt/a

i to się udaje. Przesunięte drzewo i jego kopia zniknęły
z pojemnika. Teraz pozostała tylko rozmnożona kopia i udało się
przywrócony do poprzedniego stanu:

grep /mnt /proc/self/mountinfo
775 355 ... /mnt ... master:646
776 775 ... /mies./rok ...

Ale deskryptor pliku nadal odnosi się do przeniesionego drzewa. A więc synchroniczny
umount odłączył uchwyt, który jest nadal w użyciu.

Naucz propagate_mount_busy() tych samych kontroli, które propagate_umount()
robi. Teraz sprawdza, czy nie ma jednej ofiary bez dzieci
dla którego może założyć, że MNT_LOCKED jest usuwany przy każdej kopii
propagate_umount() tak. Kopie tworzą łańcuchy. IOW, gdy sama kopia
otrzymuje propagację od rodzica ofiary, a następnie od wierzchowca
punkt montowania wewnątrz tej kopii jest również kopią. Czy wierzchowiec otrzymuje
Propagację od ofiary można po prostu sprawdzić, przechodząc po niej
mistrzowie. Przejdź każdy łańcuch raz od jego szczytu, abyśmy mieli pewność, że jest on zagnieżdżony
kopie pozostają liniowe. Sprawdź raz każde odniesienie w każdej otrzymanej kopii
niezamontowany.

>_ 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