CVE-2026-98431
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
RDMA/uverbs: Napraw zależność cykliczną mmap_lock/disassociation_lock
Zatwierdź 51976c6cd786 („RDMA/core: Podaj rdma_user_mmap_disassociate()
aby odłączyć strony mmap”) wprowadzono disassociation_lock w celu ochrony
nowe rejestracje mmap przeciwko uverbs_user_mmap_disassociate(), ale
stworzył impas ABBA:
Wątek A (mmap/widelec):
mmap_lock -> blokada_odłączenia
Wątek B (rozłącz):
disassociation_lock -> mmap_lock
Napraw, całkowicie usuwając disassociation_lock i używając istniejącego pliku
Zamiast tego hw_destroy_rwsem. hw_destroy_rwsem już zapewnia to samo
ochrona: oba używają rdma_umap_open() i ib_uverbs_mmap().
down_read_trylock() przed zarejestrowaniem nowego VMA, więc trzymając hw_destroy_rwsem
w uverbs_user_mmap_disassociate() wystarczy do zablokowania nowych rejestracji.
trylock jest używany w obu ścieżkach mmap (nie blokuje down_read), ponieważ
mmap_lock jest już wstrzymany przy wpisie, a uverbs_user_mmap_disassociate()
nabywa wewnętrznie mmap_lock — odczyt blokujący odtworzyłby to samo
impas.
Jedynym wywołującym, który nie pobierał hw_destroy_rwsem do zapisu, był
rdma_user_mmap_disassociate(). Napraw to, aby pobierać rwsem per-ufile while
iteracja pod lists_mutex. Jest to bezpieczne, ponieważ ib_uverbs_close()
całkowicie uwalnia hw_destroy_rwsem przed przejęciem lists_mutex, więc plik
dwa zamki nigdy nie są trzymane jednocześnie.
ostrzeżenie o blokadzie:
[ 776.654252] ======================================================
[776.655214] OSTRZEŻENIE: wykryto możliwą zależność od blokowania cyklicznego
[776.656167] 6.18.0for-upstream_debug_94e244d9ccab #1 Nieskażone
[ 776.657114] ----------------------------------------------------------------
[776.658087] devlink/14824 próbuje uzyskać blokadę:
[ 776.658879] ffff88811170c800 (&mm->mmap_lock){++++}-{4:4}, pod adresem: uverbs_user_mmap_disassociate+0x168/0x780 [ib_uverbs]
[ 776.660479]
[776.660479], ale zadanie już wstrzymuje blokadę:
[ 776.661460] ffff888142d92b08 (&file->disassociation_lock){+.+.}-{4:4}, pod adresem: uverbs_user_mmap_disassociate+0x39/0x780 [ib_uverbs]
[ 776.663177]
[ 776.663177] który zamek jest już zależny od nowego zamka.
[ 776.663177]
[ 776.664525]
[ 776.664525] istniejący łańcuch zależności (w odwrotnej kolejności) to:
[ 776.665724]
[ 776.665724] -> #2 (&plik->disassociation_lock){+.+.}-{4:4}:
[ 776.666887] __mutex_lock+0x16d/0x2330
[ 776.667633] rdma_umap_open+0x129/0x280 [ib_uverbs]
[ 776.668489] dup_mmap+0xa40/0x1790
[ 776.669170] proces_kopii+0x5dd2/0x6170
[ 776.669933] klon_jądra+0xb6/0x610
[ 776.670636] __do_sys_clone+0xb5/0xf0
[ 776.671354] do_syscall_64+0x70/0x12e0
[ 776.672083] wpis_SYSCALL_64_after_hwframe+0x4b/0x53
[ 776.672940]
[ 776.672940] -> #1 (&mm->mmap_lock/1){+.+.}-{4:4}:
[ 776.673985] down_write_nested+0x90/0x1e0
[ 776.674751] dup_mmap+0x201/0x1790
[ 776.675448] proces_kopii+0x5dd2/0x6170
[ 776.676180] kernel_clone+0xb6/0x610
[ 776.676904] __do_sys_clone+0xb5/0xf0
[ 776.677615] do_syscall_64+0x70/0x12e0
[ 776.678351] wpis_SYSCALL_64_after_hwframe+0x4b/0x53
[ 776.679239]
[ 776.679239] -> #0 (&mm->mmap_lock){++++}-{4:4}:
[ 776.680253] __lock_acquire+0x18c6/0x2ec0
[ 776.681018] blokada_pozyskania+0x10e/0x2e0
[ 776.681742] down_read+0x95/0x430
[ 776.682395] uverbs_user_mmap_disassociate+0x168/0x780 [ib_uverbs]
[ 776.683436] uverbs_destroy_ufile_hw+0x1ae/0x270 [ib_uverbs]
[ 776.684416] ib_uverbs_remove_one+0x22b/0x420 [ib_uverbs]
[ 776.685371] usuń_klient_kontekst+0xa6/0xf0 [ib_core]
[ 776.686342] urządzenie_wyłączające+0x12b/0x240 [ib_core]
[ 776.687249] __ib_unregister_device+0x269/0x460 [ib_core]
[ 776.688233] ib_unregister_device+0x21/0x30 [ib_core]
[ 776.689140] mlx5r_remove+0xd0/0x170 [mlx5_ib]
[ 776.689999] urządzenie_release_driver_internal+0x3b2/0x5
---obcięty---
>_ 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