Odebrany

CVE-2026-90131

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ę:

ntfs: serializuj odczyty rezydentne iomap za pomocą mrec_lock

ntfs_read_iomap_begin_resident() przegląda rekord MFT
ntfs_attr_lookup() -> ntfs_attr_find() bez pobierania ni->mrec_lock,
podczas gdy ntfs_attr_record_resize(), ntfs_make_room_for_attr() i
ntfs_resident_attr_record_add() memmove() ten sam bufor base_ni->mrec
pod tym zamkiem. map_mft_record() pobiera tylko odniesienie, a nie
serializować, aby czytelnik mógł zaobserwować rozdartą długość i przesunięcie atrybutu
pola, podczas gdy piszący przenosi rekordy.

KCSAN zgłasza wyścig pomiędzy ścieżką błędu odczytu mmap i obiema funkcjami link()
i odłącz():

BŁĄD: KCSAN: wyścig danych w ntfs_attr_find / ntfs_attr_record_resize

napisz do 0xffff888100af1018 o wielkości 4 bajtów w zadaniu 96 na procesorze 1:
ntfs_attr_record_resize+0xd2/0x130
ntfs_attr_record_rm+0xad/0x530
ntfs_delete+0x224/0x640
ntfs_unlink+0x14d/0x280
vfs_unlink+0x157/0x520

odczytaj do 0xffff888100af1018 z 4 bajtów przez zadanie 95 na procesorze 0:
ntfs_attr_find+0x104/0x5b0
ntfs_attr_lookup+0x39c/0x10c0
ntfs_read_iomap_begin_resident+0xc6/0x230
ntfs_read_iomap_begin+0x5d/0xa0
iomap_iter+0x2e2/0x6e0
iomap_read_folio+0x147/0x2a0
ntfs_read_folio+0x108/0x170
filemap_read_folio+0x35/0x100
plikmap_fault+0x993/0x1000

zmieniona wartość: 0x00000250 -> 0x000001f0

Adres to mrec + 0x18, czyli mft_record.bytes_in_use, a zmiana
oznacza usunięcie 96 bajtów jednego atrybutu $FILE_NAME.

Zachowaj base_ni->mrec_lock od rezydenta, czytaj wyszukiwanie iomap
iomap_end(). Chroni to zarówno spacer atrybutu, jak i następną kopię
z iomap->inline_data, który wskazuje na rekord MFT. Nierezydent
ścieżka pozostaje sama: ntfs_lookup() zawiera już i-węzły katalogu
mrec_lock podczas odczytu folio indeksu za pomocą metody read_mapping_folio() i
przejęcie blokady we wspólnym zakleszczeniu opakowania z blokowaniem rekurencyjnym
na mrec_lock. Komentarz powyżej wywołania read_mapping_folio().
fs/ntfs/dir.c zauważa to samo zagrożenie.

Ścieżka wyszukiwania używa tego samego pomocnika wyszukiwania, ale nie powoduje dereferencji
iomap->inline_data. Zwolnij blokadę przed powrotem z tej ścieżki,
podczas gdy zwykła ścieżka odczytu rejestruje base_ni w iomap->private i releases
blokadę z wywołania zwrotnego iomap_end().

Testowano na odtwarzaczu, który wystąpił błąd w 16-bajtowym pliku rezydentnym
inny wątek uruchamia na nim link()/unlink(). Przed: 40 raportów KCSAN
około jednej sekundy. Po: brak raportów w ciągu 180 sekund, ponad 206 090 odczytań
iteracji i 423 540 cykli łączenia/rozłączania. Kompilacja PROVE_LOCKING pokazuje nie
lockdep splat z tym samym odtwarzaczem działającym przez 60 sekund.

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