Odebrany

CVE-2026-98520

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

drm/amdkfd: napraw lukę dotyczącą użycia po zwolnieniu i lukę obejmującą wiele kontenerów w kfd_dev_mapping

kfd_dev_mapping buforuje przestrzeń adresową pierwszego otwieracza /dev/kfd
tak aby ścieżka resetowania GPU mogła wywołać funkcję unmap_mapping_range() w celu zniszczenia wszystkiego
mapowania przestrzeni użytkownika dla zakresów dzwonków i MMIO. Ten projekt ma dwa
błędy, które pojawiają się w SRIOV z wieloma kontenerami:

1. Zakleszczenie typu use-after-free / rwsem. Wskaźnik buforowany odnosi się do
i-węzeł należący do kontenera pierwszego otwieracza. Kiedy ten pojemnik
kończy działanie, a jego i-węzeł zostaje zwolniony, kfd_dev_mapping staje się zwisającym
wskaźnik. Późniejszy reset GPU powoduje wyrejestrowanie go w środku
unmap_mapping_range(), która pobiera i_mmap_rwsem na zwolnionym i-węźle,
powodując ciężkie zawieszenie, które można zaobserwować jako nieprzerwane oczekiwanie na rwsem.

2. Luka obejmująca wiele kontenerów. Tylko przestrzeń adresowa pierwszego otwieracza jest buforowana;
VMA utworzone przez późniejsze otwieracze znajdują się w innej przestrzeni adresowej i
nigdy nie są osiągane przez unmap_mapping_range(). Po zresetowaniu procesora graficznego
nieaktualne mapowania sprawiają, że dzwonek do drzwi i strony MMIO są dostępne dla gości
przestrzeń użytkownika bez zainstalowanego procesora graficznego, co grozi przekroczeniem limitu czasu transakcji PCIe
i NMI wpada w panikę.

Napraw oba błędy w ten sam sposób, jakiego używa rdzeń DRM (drm_drv.c):
utwórz prywatny pseudosystem plików w momencie inicjacji modułu i przydziel go
anonimowy i-węzeł z niego. W kfd_open() przekieruj każdy otwieracz
file->f_mapping do przestrzeni adresowej tego i-węzła. I-węzeł jest
należący do modułu, żyje dokładnie tak długo, jak moduł amdgpu i zbiera
VMA ze wszystkich otwieraczy w jednej przestrzeni adresowej. Singiel
unmap_mapping_range() w ścieżce resetowania następnie poprawnie dociera
mapowania każdego kontenera bez ryzyka wiszącego wskaźnika.

Zawieszenie objawia się zablokowaniem śledzenia NMI w kolejce roboczej resetowania GPU
kręci się w rwsem_down_read_slowpath() z uszkodzonym i_mmap_rwsem:

Kolejka robocza: amdgpu-reset-dev xgpu_ai_mailbox_flr_work [amdgpu]
Zadzwoń do śledzenia:
<ZADANIE>
kvm_wait+0x1f/0x40
__pv_queued_spin_lock_slowpath+0x31d/0x3a0
_raw_spin_lock_irq+0x51/0x80
rwsem_down_read_slowpath+0xb3/0x550
down_read+0x48/0xd0
unmap_mapping_range+0x71/0x140
kfd_dev_unmap_mapping_range+0x5b/0x140 [amdgpu]
amdgpu_amdkfd_clear_kfd_mapping+0xd8/0x190 [amdgpu]
amdgpu_device_gpu_recover+0x232/0x450 [amdgpu]
xgpu_ai_mailbox_flr_work+0xb5/0xc0 [amdgpu]
proces_one_work+0x18e/0x3e0
wątek_pracownika+0x2e3/0x420
kwątek+0x10a/0x230

(wiśnia wybrana z zatwierdzenia 1128b4a52de1572e87431de837fd9850cb99542c)

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