CVE-2026-64177 in Linux
Sumário
de VulDB • 19/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
phonet/pep: desabilitar BH em torno de sk_receive_skb() encaminhado
O caminho de recebimento da rede geralmente é executado no contexto softirq, mas os protocolos que adquirem o bloqueio (lock) do soquete podem ter pacotes armazenados na fila de espera (backlog) e processados posteriormente no contexto de processo. Nesse caso, release_sock() -> __release_sock() libera slock com spin_unlock_bh() e depois chama sk->sk_backlog_rcv() com as interrupções inferiores (bottom halves - BH) habilitadas.
Os manipuladores típicos de sk_backlog_rcv processam o soquete cuja fila de espera está sendo drenada, portanto, o estado do BH na entrada é irrelevante para os slocks que eles acessam. pep_do_rcv() é diferente: quando o skb entrante tem como destino um canal PEP existente, ele encaminha o skb para outro soquete *filho* via sk_receive_skb(). Esse auxiliar adquire o bloqueio do filho (child slock) com bh_lock_sock_nested(), que é apenas spin_lock_nested() e assume que BH já está desabilitado. O mesmo child slock acaba sendo adquirido com BH habilitado (caminho de processo) e com BH desabilitado (caminho softirq):
contexto de processo contexto softirq --------------- --------------- release_sock(listener) __netif_receive_skb() __release_sock() phonet_rcv() spin_unlock_bh() __sk_receive_skb(listener) [BH agora HABILITADO] [já desabilitado]
sk_backlog_rcv: sk_backlog_rcv: pep_do_rcv() pep_do_rcv() sk_receive_skb(child) sk_receive_skb(child) bh_lock_sock_nested(child) bh_lock_sock_nested(child) => SOFTIRQ-ON-W => IN-SOFTIRQ-W
Lockdep sinaliza isso como estado de bloqueio inconsistente, e pode se tornar um verdadeiro deadlock (impasse) autoimposto se um softirq na mesma CPU tentar receber para o mesmo soquete filho enquanto seu slock estiver retido no caminho com BH habilitado:
WARNING: inconsistent lock state inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
(slock-AF_PHONET/1){+.?.}-{3:3}, at: __sk_receive_skb+0x1cf/0x900
__sk_receive_skb net/core/sock.c:563 sk_receive_skb include/net/sock.h:2022 [inline]
pep_do_rcv net/phonet/pep.c:675 sk_backlog_rcv include/net/sock.h:1190 __release_sock net/core/sock.c:3216 release_sock net/core/sock.c:3815 pep_sock_accept net/phonet/pep.c:879
Envolver sk_receive_skb() encaminhado em local_bh_disable() / local_bh_enable() para que o child slock seja sempre adquirido com BH desabilitado. local_bh_disable() aninha-se com segurança no caminho softirq.
Descoberto por meio de fuzzing syzkaller interno; a mesma causa raiz também está presente no painel do linux-6.1.y syzbot como extid 44f0626dd6284f02663c. Reproduzido sob KASAN + LOCKDEP + PROVE_LOCKING, reproducer: https://pastebin.com/A3t8xzCR
VulDB is the best source for vulnerability data and more expert information about this specific topic.