-

CVE-2026-98398

locking/lockdep: Invalidate stale class_cache entries for zapped classes

In the Linux kernel, the following vulnerability has been resolved:

locking/lockdep: Invalidate stale class_cache entries for zapped classes

syzbot reported a lockdep splat hitting DEBUG_LOCKS_WARN_ON(1) in
hlock_class() due to an invalid class_idx:

  WARNING: kernel/locking/lockdep.c:238 at __lock_acquire+0x382/0x2cf0 kernel/locking/lockdep.c:5203
  Workqueue: 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 kernel/locking/lockdep.c:5203
  Call Trace:
   <IRQ>
   lock_acquire+0x106/0x350 kernel/locking/lockdep.c:5886
   _raw_spin_lock+0x2e/0x40 kernel/locking/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
   ...

When a lock class is zapped (e.g. during module unload or key
unregistration), zap_class() clears the class's bit in
lock_classes_in_use and removes it from the class hash table.
However, existing lockdep_map instances embedded in data structures
may still retain a pointer to the zapped class in their class_cache[]
array.

When __lock_acquire() subsequently runs on such a lock, it finds
lock->class_cache[subclass] != NULL, skipping register_lock_class()
and assigning hlock->class_idx to the index of the zapped class. When
check_wait_context() or hlock_class() inspects the held_lock, it finds
!test_bit(class_idx, lock_classes_in_use) and warns. Furthermore, if
the zapped slot is subsequently re-allocated to an unrelated lock key,
the stale class_cache entry would erroneously match the unrelated
class (ABA issue).

Add lock_class_cache_is_valid() to validate that the cached class is
within lock_classes bounds, still allocated in lock_classes_in_use
(using uninstrumented arch_test_bit() in __always_inline context so it
is safe in noinstr contexts like match_held_lock()), and that
class->key matches the expected subkey (taking lockdep_set_subclass()
overrides into account). Also use READ_ONCE()/WRITE_ONCE() when
accessing class_cache[].  If the entry is invalid or stale, fall back
to register_lock_class() / look_up_lock_class().
Daten sind bereitgestellt durch das CVE Programm von einer CVE Numbering Authority (CNA) (Unstrukturiert).
HerstellerLinux
≫
Produkt Linux
Default Statusunaffected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < f8a1281ab82df5b51fd0384354d4b21daf2b7af0
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < 1c9d664e2e067fca69e5a41d68e23bbc66a583fe
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < 6bc345f6d81ebe22e0f355c2a21d7e29691f9332
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < f63c86e9d267629758adaba18579e784ddd63c32
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < c7acfb04c7e2e2dea248282b21373d93296644dd
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < baa320fbb2f9fea50f5632a307da8ce84fbef5bd
Status affected
Version a0b0fd53e1e67639b303b15939b9c653dbe7a8c4
Version < 02c6be7d675b21d81f0ba3a524346850a8c0e3bf
Status affected
HerstellerLinux
≫
Produkt Linux
Default Statusaffected
Version 5.1
Status affected
Version 0
Version < 5.1
Status unaffected
Version <= 5.15.*
Version 5.15.222
Status unaffected
Version <= 6.1.*
Version 6.1.189
Status unaffected
Version <= 6.6.*
Version 6.6.158
Status unaffected
Version <= 6.12.*
Version 6.12.111
Status unaffected
Version <= 6.18.*
Version 6.18.53
Status unaffected
Version <= 7.2.*
Version 7.2.7
Status unaffected
Version <= *
Version 7.3
Status unaffected
VulnDex Vulnerability Enrichment
Diese Information steht angemeldeten Benutzern zur Verfügung. Login Login
Zu dieser CVE wurde keine Warnung gefunden.
EPSS Metriken
Typ Quelle Score Percentile
EPSS FIRST.org 0.22% 0.111
CVSS Metriken
Quelle Base Score Exploit Score Impact Score Vector String
Es wurden noch keine Informationen zu CWE veröffentlicht.
https://git.kernel.org/stable/c/f8a1281ab82df5b51fd0384354d4b21daf2b7af0
https://git.kernel.org/stable/c/1c9d664e2e067fca69e5a41d68e23bbc66a583fe
https://git.kernel.org/stable/c/6bc345f6d81ebe22e0f355c2a21d7e29691f9332
https://git.kernel.org/stable/c/f63c86e9d267629758adaba18579e784ddd63c32
https://git.kernel.org/stable/c/c7acfb04c7e2e2dea248282b21373d93296644dd
https://git.kernel.org/stable/c/baa320fbb2f9fea50f5632a307da8ce84fbef5bd
https://git.kernel.org/stable/c/02c6be7d675b21d81f0ba3a524346850a8c0e3bf