CVE-2026-64177 in Linux
Zusammenfassung
von VulDB • 20.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
phonet/pep: Deaktivieren der Bottom Halves (BH) um `sk_receive_skb()` bei weitergeleiteten Paketen herum.
Der Netzwerk-Empfängepfad wird normalerweise im softirq-Kontext ausgeführt, aber Protokolle, die den Socket-Lock übernehmen, können Pakete in der Backlog-Warteschlange speichern und später aus dem Prozesskontext verarbeiten. In diesem Fall gibt `release_sock()` -> `__release_sock()` das slock mit `spin_unlock_bh()` frei und ruft dann `sk->sk_backlog_rcv()` auf, wobei die Bottom Halves aktiviert sind.
Typische `sk_backlog_rcv`-Handler verarbeiten den Socket, dessen Backlog gerade geleert wird; der BH-Zustand beim Eintritt ist daher für die von ihnen berührten slocks irrelevant. `pep_do_rcv()` verhält sich anders: Wenn das eingehende skb ein vorhandenes PEP-Pipe-Ziel hat, leitet es das skb über `sk_receive_skb()` an einen anderen *Kind*-Socket weiter. Diese Hilfsfunktion übernimmt den Kind-slock mit `bh_lock_sock_nested()`, was lediglich `spin_lock_nested()` ist und davon ausgeht, dass BH bereits deaktiviert ist. Der gleiche Kind-slock wird daher einmal mit aktivierten BHs (Prozesspfad) und einmal mit deaktivierten BHs (softirq-Pfad) erworben:
Prozesskontext softirq-Kontext --------------- ----------------- release_sock(listener) __netif_receive_skb() __release_sock() phonet_rcv() spin_unlock_bh() __sk_receive_skb(listener) [BH jetzt AKTIVIERT] [bereits deaktiviert]
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 markiert dies als inkonsistenten Lock-Zustand, und es kann zu einem echten Selbst-Deadlock werden, wenn ein softirq auf derselben CPU versucht, an denselben Kind-Socket zu empfangen, während sein slock im BH-aktivierten Pfad gehalten wird:
WARNING: inconsistent lock state inkonsistente {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} Nutzung.
(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
Packen Sie das weitergeleitete `sk_receive_skb()` in `local_bh_disable()` / `local_bh_enable()`, damit der Kind-slock immer mit deaktivierten BHs erworben wird. `local_bh_disable()` verschachtelt sich sicher im softirq-Pfad.
Entdeckt durch internes Fuzzing mit syzkaller; dieselbe Ursache liegt auch auf dem linux-6.1.y syzbot-Dashboard als extid 44f0626dd6284f02663c vor. Reproduziert unter 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.