CVE-2026-98398
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
blokowanie/lockdep: Unieważnia nieaktualne wpisy class_cache dla przeniesionych klas
syzbot zgłosił, że uderzenie blokady w DEBUG_LOCKS_WARN_ON(1) w
hlock_class() z powodu nieprawidłowego identyfikatora klasy:
OSTRZEŻENIE: kernel/locking/lockdep.c:238 w __lock_acquire+0x382/0x2cf0 kernel/locking/lockdep.c:5203
Kolejka robocza: wg-crypt-wg0 wg_packet_tx_worker
RIP: 0010:hlock_class kernel/locking/lockdep.c:238 [inline]
RIP: 0010:check_wait_context kernel/locking/lockdep.c:4870 [inline]
RIP: 0010:__lock_acquire+0x389/0x2cf0 jądro/locking/lockdep.c:5203
Zadzwoń do śledzenia:
<przerwanie>
lock_acquire+0x106/0x350 jądro/locking/lockdep.c:5886
_raw_spin_lock+0x2e/0x40 jądro/blokowanie/spinlock.c:173
tcp_tsq_handler+0x29/0x200 net/ipv4/tcp_output.c:1291
tcp_tsq_workfn+0x384/0x410 net/ipv4/tcp_output.c:1325
...
Kiedy klasa blokady jest zapakowana (np. podczas rozładowywania modułu lub wykonywania polecenia key
wyrejestrowanie), zap_class() czyści bit klasy
lock_classes_in_use i usuwa go z tablicy mieszającej klasy.
Jednakże istniejące instancje lockdep_map osadzone w strukturach danych
mogą nadal zachować wskaźnik do zapakowanej klasy w swoim class_cache[]
tablica.
Kiedy __lock_acquire() następnie uruchamia taką blokadę, znajduje
lock->class_cache[podklasa] != NULL, pomijanie Register_lock_class()
i przypisanie hlock->class_idx do indeksu zapakowanej klasy. Kiedy
check_wait_context() lub hlock_class() sprawdza hold_lock i znajduje
!test_bit(class_idx, lock_classes_in_use) i ostrzega. Ponadto, jeśli
zajęte miejsce jest następnie ponownie przydzielane niepowiązanemu kluczowi zamka,
nieaktualny wpis class_cache błędnie pasowałby do niepowiązanego wpisu
klasa (problem ABA).
Dodaj funkcję lock_class_cache_is_valid(), aby sprawdzić, czy klasa w pamięci podręcznej jest
w granicach lock_classes, nadal przydzielane w lock_classes_in_use
(używając nieinstrumentowanej funkcji arch_test_bit() w kontekście __always_inline, więc tak
jest bezpieczny w kontekstach noinstr, takich jak match_held_lock()) i to
class->key pasuje do oczekiwanego podklucza (biorąc pod uwagę lockdep_set_subclass()
nadpisania pod uwagę). Użyj także READ_ONCE()/WRITE_ONCE() kiedy
uzyskiwanie dostępu do pamięci podręcznej klasy []. Jeśli wpis jest nieprawidłowy lub nieaktualny, cofnij się
do Register_lock_class() / look_up_lock_class().
>_ Referencje
- https://git.kernel.org/stable/c/02c6be7d675b21d81f0ba3a524346850a8c0e3bf
- https://git.kernel.org/stable/c/1c9d664e2e067fca69e5a41d68e23bbc66a583fe
- https://git.kernel.org/stable/c/6bc345f6d81ebe22e0f355c2a21d7e29691f9332
- https://git.kernel.org/stable/c/baa320fbb2f9fea50f5632a307da8ce84fbef5bd
- https://git.kernel.org/stable/c/c7acfb04c7e2e2dea248282b21373d93296644dd
- https://git.kernel.org/stable/c/f63c86e9d267629758adaba18579e784ddd63c32
- https://git.kernel.org/stable/c/f8a1281ab82df5b51fd0384354d4b21daf2b7af0
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