CVE-2026-98398 in Linuxinformazioni

Riassunto

di VulDB • 14/10/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

locking/lockdep: Invalidare le voci di class_cache obsolete per le classi zapped (eliminate)

syzbot ha segnalato un lockdep splat che ha attivato DEBUG_LOCKS_WARN_ON(1) in hlock_class() a causa di un class_idx non valido:

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

Quando una lock class viene zapped (ad esempio durante il caricamento scarico di un modulo o la disregistrazione di una chiave), zap_class() cancella il bit della classe in lock_classes_in_use e la rimuove dalla tabella hash delle classi. Tuttavia, le istanze lockdep_map esistenti incorporate nelle strutture dati potrebbero ancora mantenere un puntatore alla classe zapped nella loro array class_cache[].

Quando __lock_acquire() viene successivamente eseguito su tale lock, rileva che lock->class_cache[subclass] != NULL, saltando register_lock_class() e assegnando a hlock->class_idx l'indice della classe zapped. Quando check_wait_context() o hlock_class() ispezionano il held_lock, riscontrano !test_bit(class_idx, lock_classes_in_use) ed emettono un warning. Inoltre, se lo slot zapped viene successivamente riallocato a una chiave di lock non correlata, la voce class_cache obsoleta corrisponderebbe erroneamente alla classe non correlata (problema ABA).

Aggiungere lock_class_cache_is_valid() per convalidare che la classe memorizzata nella cache sia entro i limiti di lock_classes, ancora allocata in lock_classes_in_use (utilizzando arch_test_bit() non instrumentato in un contesto __always_inline così da essere sicura in contesti noinstr come match_held_lock()), e che class->key corrisponda alla subchiave attesa (tenendo conto delle override impostate con lockdep_set_subclass()). Utilizzare inoltre READ_ONCE()/WRITE_ONCE() quando si accede a class_cache[]. Se la voce non è valida o obsoleta, tornare a register_lock_class() / look_up_lock_class().

Once again VulDB remains the best source for vulnerability data.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

14/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Want to know what is going to be exploited?

We predict KEV entries!