CVE-2026-89987
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
mm/huge_memory: przenieś brudny kawałek pmd do folio na zap
zap_huge_pmd_folio() propaguje młody bit pmd do folio dla
akta, ale nie ten brudny kawałek. Ścieżka pte propaguje go, w
zap_present_folio_ptes(), podobnie jak ścieżka podziału pmd, in
__split_huge_pmd_locked().
W przypadku większości mapowań plików pominięcie jest nieszkodliwe, ponieważ zapis do pliku a
mapowanie współdzielonych plików przechodzi przez page_mkwrite(), co zanieczyszcza folio.
tmpfs jest inny: nie ma page_mkwrite() i vma_wants_writenotify()
jest dla niego fałszem, więc podczas instalacji mapowania MAP_SHARED tmpfs pojawia się błąd *odczytu*
zapisywalny PMD poprzez do_read_fault(). do_read_fault() nie wywołuje
error_dirty_shared_page(), więc kolejne zapisują się w tym zestawie mapowania
tylko brudny sprzęt w PMD i nigdy nie wywołuj folio_mark_dirty().
Folio shmem przydzielone przez błąd jest oznaczone jako aktualne, ale nie zabrudzone (patrz
jasne: blok w shmem_get_folio_gfp()), więc PG_dirty nigdy nie jest ustawione na
wszystko.
Odmapowanie takiego folio - munmap() lub exit_mmap() po zakończeniu procesu -
następnie traci jedyny rekord, w którym został zapisany, ponieważ zap_huge_pmd()
upuszcza pmd bez przesyłania brudnego bitu. Odzyskaj potem widzi
czyste folio shmem: cały blok wymiany w funkcji Shrink_folio_list() to
wewnątrz „if (folio_test_dirty(folio))”, więc pageout() jest pomijane i
folio podlega funkcji __remove_mapping(). Tam folio_is_file_lru() ma wartość false
dla folio zamienionego, więc nie jest tworzony żaden wpis w tle i
__filemap_remove_folio(folio, NULL) po prostu opróżnia miejsce i_pages. The
dane są zwalniane bez zapisywania w celu wymiany i włącza się następny błąd
ten indeks zwraca świeżo wyzerowane folio.
Jest to cicha utrata danych dla dowolnego procesu, który utrzymuje stan w MAP_SHARED
segment tmpfs w obszarze unmap - na przykład pamięć podręczna przekazana z jednego
generowanie procesu do następnego poprzez /dev/shm. Wymaga folio
być mapowany przez PMD, więc pojawia się tylko po włączeniu shmem THP (tzn
co zrobiliśmy we flocie Meta i zaczęliśmy zauważać awarie); z wyłączonym THP
ścieżka pte poprawnie przesyła brudny bit. To też staje się tylko widoczne
gdy funkcja wymiany jest włączona, ponieważ bez folio shmem urządzenia wymiennego (które są
na anon LRU) nie są w ogóle skanowane przez odzyskanie, więc czyste folio tak
nigdy nie upadł.
Reprodukowane na x86_64 z zamontowanym tmpfs huge=within_size: read-fault a
w regionie o wielkości 2 MB, zapisz znany wzór poprzez powstałe mapowanie,
munmap, wymuś odzyskanie grupy c, a następnie ponownie zmapuj i przeczytaj ponownie. Bez
w tej poprawce region odczytuje jako zera, a vmstat pokazuje zswpout 0 - the
dane zostały odrzucone, a nie zamienione. Dzięki tej łatce region czyta
z powrotem prawidłowo, a strony zostały zamienione zgodnie z oczekiwaniami. Z
huge=never lub gdy pierwszym dotknięciem jest zapis, test również kończy się pomyślnie
sposób.
>_ 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