Odebrany

CVE-2026-98939

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

x86/mm: Upuść niepotrzebną kopię strony PMD podczas zwalniania

W przypadku pudełka z oddzielnym procesorem graficznym lockdep zgłasza możliwy zakleszczenie jako
gdy tylko kswapd zmniejszy pulę stron TTM. Bezpośrednią przyczyną jest
Zatwierdzenie x86, które dodało mmap_read_lock() do ochrony strony jądra
kod mungujący.

Ogromny kod vmap utrzymuje tę samą blokadę w przypadku alokacji GFP_KERNEL,
co jest nie-nie, ponieważ odzyskanie może to wytrzymać. Przydział ten jest w a
*wolna* ścieżka do tabeli stron i kończy się na wątpliwych celach[1].
Zasadniczo próbuje uniknąć ustawienia sprzętu Accessed=1 w tabeli stron
wpisy, które są niedostępne dla sprzętu, nie stanowią problemu.

Usuń kopię PMD. Odłącz oryginalną stronę PMD od PUD i wyrównaj
pamięci podręczne średniego poziomu i zwalniaj tabele PTE bezpośrednio z pliku
odłączona strona PMD. Gdy nie ma już przydziału, problem blokowania zniknął.

Mapa/analiza Lockdepa:

OSTRZEŻENIE: wykryto możliwą zależność blokowania cyklicznego
7.3.0-rc3-f6e7b42bf05b+ #183 Skażony: G U
------------------------------------------------------
kswapd0/269 próbuje uzyskać blokadę:
((init_mm).mmap_lock){++++}-{4:4}, pod adresem: zmiana_strony_attr_set_clr+0x29a/0x4a0
ale zadanie już blokuje:
(pool_shrink_rwsem){.+.+}-{4:4}, o: ttm_pool_shrink+0xb2/0x330 [ttm]
Łańcuch istnieje:
(init_mm).mmap_lock --> fs_reclaim --> basen_shrink_rwsem

Cykl zbudowany jest z trzech krawędzi:

1) basen_shrink_rwsem -> (init_mm).mmap_lock

Zmniejszacz TTM przywraca atrybut pamięci podręcznej każdej strony
zwalnia, trzymając basen_shrink_rwsem:

ttm_pool_shrink()
-> ttm_pool_dispose_list()
-> ttm_pool_free_page()
-> set_pages_wb()
-> zmień_stronę_attr_set_clr() [ init_mm mmap blokada odczytu ]

2) fs_reclaim -> Pool_shrink_rwsem

Ten sam skurczacz, wezwany z odzysku.

3) (init_mm).mmap_lock -> fs_reclaim

ioremap() instalująca ogromne mapowanie PUD na istniejącej tabeli PMD:

ioremap_page_range()
-> vmap_range_noflush()
-> vmap_try_huge_pud() [ init_mm mmap blokada odczytu ]
-> pud_free_pmd_page()
-> __get_free_page(GFP_KERNEL) [wchodzi do odzyskania ]

[dhansen: Dużo zmian/przycinania dziennika zmian i połączonych komentarzy z my
wersja poprawki. ]

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