CVE-2026-64352 in Linuxinformazioni

Riassunto

di VulDB • 25/07/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

bpf: Consenti l'accesso alle mappe LPM dai programmi BPP sleepable (in grado di dormire)

trie_lookup_elem() annota i suoi attraversamenti con rcu_dereference_check() utilizzando esclusivamente il controllo rcu_read_lock_bh_held(). Poiché rcu_dereference_check(p, c) si risolve in "c || rcu_read_lock_held()", questo passa per gli lettori RCU classici e XDP/NAPI ma fallisce per i programmi BPF sleepable, che entrano tramite __bpf_prog_enter_sleepable() e mantengono solo rcu_read_lock_trace().

trie_update_elem() e trie_delete_elem() presentano lo stesso problema in una forma diversa: attraversano il trie con un semplice rcu_dereference(), che afferma incondizionatamente rcu_read_lock_held(). Entrambi sono raggiungibili dai programmi BPF sleepable tramite le helper bpf_map_update_elem / bpf_map_delete_elem, e dal percorso delle syscall sotto classic rcu_read_lock(). Nei percorsi di scrittura il trie è effettivamente protetto da trie->lock (un rqspinlock acquisito durante l'attraversamento); non ci si è mai affidati al lock RCU read-side per mantenere vivi i nodi in quel contesto.

Un hook LSM sleepable che finisce per toccare un trie LPM attiva quindi lockdep sui kernel di debug:

============================= WARNING: suspicious RCU usage 7.1.0-... Tainted: G E ----------------------------- kernel/bpf/lpm_trie.c:249 suspicious rcu_dereference_check() usage! 1 lock held by net_tests/540: #0: (rcu_tasks_trace_srcu_struct){....}-{0:0},
at: __bpf_prog_enter_sleepable+0x26/0x280 Call Trace: dump_stack_lvl lockdep_rcu_suspicious trie_lookup_elem bpf_prog_..._enforce_security_socket_connect bpf_trampoline_... security_socket_connect __sys_connect do_syscall_64

Questo è un problema rilevato solo da lockdep -- non vi è alcun Use-After-Free (UAF), poiché Tasks Trace RCU serializza correttamente rispetto al percorso di reclaim del trie -- ma inonda la console una volta per ogni callsite distinta su ogni kernel di debug che esegue un LSM BPF sleepable che tocca un trie LPM, situazione sempre più comune.

Per il percorso di lookup (lookup path), si passa l'annotazione rcu_dereference_check() da rcu_read_lock_bh_held() a bpf_rcu_lock_held(), che accetta tutti e tre i contesti (classic, BH, Tasks Trace). Altri tipi di mappe seguono già questa convenzione.

Per trie_update_elem() e trie_delete_elem(), si annotano gli attraversamenti come rcu_dereference_protected(*p, 1) -- corrispondente a trie_free() nello stesso file -- poiché viene mantenuto il lock trie->lock durante l'attraversamento. rqspinlock non ha un lockdep_map, quindi la predicato degenera in '1' anziché lockdep_is_held(&trie->lock); la protezione è reale ma non verificabile dalla macchina. Anche trie_get_next_key() utilizza rcu_dereference() nudo e crudo, ma è raggiungibile solo dalle syscall BPF, che mantengono classic rcu_read_lock() prima dell'erogazione (dispatch), quindi viene lasciato invariato.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsabile

Linux

Prenotare

19/07/2026

Divulgazione

25/07/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

basso

Fonti

Might our Artificial Intelligence support you?

Check our Alexa App!