CVE-2026-98539
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
fs/ntfs3: użyj d_instantiate_new() w ntfs_create_inode() i zamorduj syzbota w sadze „WARNING in do_new_mount”
ntfs_create_inode() tworzy nowy i-węzeł poprzez ntfs_new_inode(). To hashuje
go za pomocą wstawki_inode_locked() i dlatego jest oznaczony jako I_NEW aż do
odblokowanie_nowego_węzła().
ntfs 3 wywołuje d_instantiate() pomiędzy nimi... Ponieważ dentysta był
już zaszyfrowany przez wyszukiwanie, zanim znajdzie go spacer po utworzeniu dowolnej ścieżki
bez dotykania i_rwsem rodzica, dzięki czemu można zablokować i-węzeł.
Jeśli i-węzeł jest katalogiem, funkcja unlock_new_inode() wywołuje funkcję
lockdep_annotate_inode_mutex_key() i zaznacza i_rwsem za pomocą
klasa i_mutex_dir_key.
To resetuje licznik, a właścicielem zamka może już być ktoś inny
wytrzymaj teraz...
syzbot zasypuje nas tym samym zapomnianym przez Boga błędem
„OSTRZEŻENIE w do_new_mount”
od 2023. Już nie mam siły więc poszedłem szukać. Afaict, syzbot
executor chdirs do świeżo zamontowanego obrazu ntfs3, tworzy plik
katalog, a następnie montuje w nim kilka pseudofs. Za każdym razem, gdy mkdir()
trwa dłużej niż oczekiwanie syzbota. Mount() działa jednocześnie:
mkdir("./sys") mount(NULL, "./sys", "sysfs")
ntfs_create_inode()
d_instancja()
user_path_at() znajduje dentry
do_lock_mount()
inode_lock(i-węzeł)
namespace_lock()
odblokowanie_nowego_inode()
lockdep_annotate_inode_mutex_key()
init_rwsem(&inode->i_rwsem)
odblokowanie_mount()
inode_unlock(i-węzeł)
Strona montażowa następnie zwalnia blokadę, która zgodnie z rwsem nikt
trzyma:
DEBUG_RWSEMS_WARN_ON((rwsem_owner(sem) != bieżący) && ...):
liczba = 0x0, magia = 0xffff888043a854e8, właściciel = 0x0,
curr 0xffff888000244880, lista jest pusta
OSTRZEŻENIE: Procesor: 0 PID: 5346 w jądrze/locking/rwsem.c:1368 __up_write
Zadzwoń do śledzenia:
inode_unlock include/linux/fs.h:877 [inline]
unlock_mount fs/namespace.c:2892 [w linii]
do_new_mount_fc fs/namespace.c:3828 [w linii]
do_new_mount+0x777/0xa40 fs/namespace.c:3887
Na PREEMPT_RT pojawia się to samo co
DEBUG_LOCKS_WARN_ON(rt_mutex_owner(lock) != bieżący)
OSTRZEŻENIE: kernel/locking/rtmutex_common.h:193 w rt_mutex_slowunlock
Funkcja up_write() przekracza liczbę resetowania. Następująca inode_lock() włączona
ten katalog nigdy nie powraca. Ścieżka prowadząca do nowego katalogu
wyścigi z mkdir() uszkadzają blokadę w ten sam sposób poprzez
inode_lock_shared() w lookup_slow().
Przełącz na d_instantiate_new() i upuść końcową funkcję unlock_new_inode().
Wszystkie ścieżki błędów kończą się przed tym punktem, przy wciąż ustawionym I_NEW i
nadal używaj funkcji odrzucania_new_inode().
Obyśmy nigdy więcej nie zobaczyli tego raportu o cholernym błędzie.
>_ 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