No kernel Linux, a seguinte vulnerabilidade foi resolvida. bpf: Permitir o acesso ao mapa LPM a partir de programas BPF adormecidos trie_lookup_elem() anota seu rcu_dereference_check() caminha com apenas rcu_read_lock_bh_held(). Porque rcu_ dereference_check(p, c) resolve para "cї. rcu_read_lock_held()", isto passa para os leitores XDP/ NAPI e RCU clássicos, mas falha para programas BPF adormecedores, que entram por __bpf_prog_enter_sleepable() e seguram apenas rcu_read_lock_trace(). Trie_update_elem() e trie_delete_elem() têm o mesmo problema de uma forma diferente: eles caminham pela trie com rcu_ dereference(), que afirma rcu_read_lock_held() incondicionalmente. Ambos são alcançables a partir de programas BPF adormecedores através do bpf_map_update_elem / bpf_map_delete_elem helpers, e do caminho de chamada de sistemas sob o clássico rcu_read_lock(). Nos caminhos do escritor a trie é realmente protegida por trie->lock (um rqspinlock tomado através da caminhada); nunca confiamos no bloqueio de read-side RCU para manter os nós vivos lá.

Um gancho LSM sonoro que acaba tocando uma trie LPM, por isso, ativa o bloqueio no kernel de depuração: ============================= ATENÇÃO: uso suspeito da RCU 7.1.0 -... Manchado: G E -------------------------- kernel/ bpf/ lpm_trie.c: 249 uso suspeito do rcu_dereference_check()! 1 bloqueio mantido por net_ testers/ 540: # 0: (rcu_tasks_trace_srcu_structut){....}-{ 0: 0 }, em: __bpf_prog_enter_sleepable+ 0 x 26 / 0 x 280 Chame o rastreamento: 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.

Isto é apenas lockdep -- não UAF, uma vez que a Tareas Trace RCU serializa contra o caminho de recuperação da trilha -- mas ele spams o console uma vez por local de chamadas distinto em cada kernel de depuração executando um LSM BPF adormecedor que toca uma triagem LPM, que é cada vez mais comum. Para o caminho de busca, mude a anotação rcu_dereference_check() de rcu_read_lock_bh_held() para bpf_rcu_lock_held(), que aceita os três contextos (clásico, BH, rastreamento de tarefas). Outros tipos de mapa já seguem esta convenção.

Para trie_update_elem() e trie_delete_elem(), anote as caminhadas como rcu_dereference_protected(*p, 1 ) -- combinando trie_free() no mesmo arquivo -- desde que trie->lock é mantido através do passeio. rqspinlock não tem lockdep_ map, então o predicado degenera para ' 1 ' em vez de lockdep_is_held(&trie->lock); a proteção é real, mas não verificable por máquina. trie_get_next_key() também usa o rcu_ dereference() descarado, mas é alcançável apenas a partir do syscall BPF, que mantém o clássico rcu_read_lock() antes de ser enviado, por isso é deixado intacto. Registro de aconselhamento: GHSA- p 2 Wc- grc 5 -Cwhm. Identificadores relacionados: CVE- 2026 - 64352.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 25 T 12: 31: 32.000 Z e lista a sua última modificação como 2026 - 07 - 25 T 12: 31: 32.000 Z. Severidade: não classificado. Nenhum vetor de pontuação está listado no registro.

Software afetado: o registro de aconselhamento não fornece um pacote normalizado ou faixa de versões. Classificação e evidência: nenhum identificador CWE está listado. O registro contém 8 suporte de referências nestes tipos: AVISO, WEB.