CVE-2026-64177 in Linuxinfo

Summary

by MITRE • 07/19/2026

In the Linux kernel, the following vulnerability has been resolved:

phonet/pep: disable BH around forwarded sk_receive_skb()

The networking receive path is usually run from softirq context, but protocols that take the socket lock may have packets stored in the backlog and processed later from process context. In that case release_sock() -> __release_sock() drops the slock with spin_unlock_bh() and then calls sk->sk_backlog_rcv() with bottom halves enabled.

Typical sk_backlog_rcv handlers process the socket whose backlog is being drained, so the BH state at entry is irrelevant for the slocks they touch. pep_do_rcv() is different: when the inbound skb targets an existing PEP pipe, it forwards the skb to a different *child* socket via sk_receive_skb(). That helper takes the child slock with bh_lock_sock_nested(), which is just spin_lock_nested() and assumes BH is already off. The same child slock therefore ends up acquired with BH on (process path) and with BH off (softirq path):

process context softirq context --------------- --------------- release_sock(listener) __netif_receive_skb() __release_sock() phonet_rcv() spin_unlock_bh() __sk_receive_skb(listener) [BH now ENABLED] [BH already disabled]
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 flags this as inconsistent lock state, and it can become a real self-deadlock if a softirq on the same CPU tries to receive to the same child socket while its slock is held in the BH-enabled path:

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

Wrap the forwarded sk_receive_skb() in local_bh_disable() / local_bh_enable() so the child slock is always acquired with BH off. local_bh_disable() nests safely on the softirq path.

Discovered via in-house syzkaller fuzzing; the same root cause also on the linux-6.1.y syzbot dashboard as extid 44f0626dd6284f02663c. Reproduced under KASAN + LOCKDEP + PROVE_LOCKING, reproducer: https://pastebin.com/A3t8xzCR

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

Analysis

by VulDB Data Team • 07/19/2026

The vulnerability identified in the Linux kernel pertains to a concurrency issue within the phonet protocol implementation, specifically affecting the PEP (Phonet Endpoint Protocol) module. This flaw arises from improper handling of bottom halves (BH) during socket lock operations, creating conditions that can lead to lock state inconsistencies and potential deadlocks. The root cause involves the interaction between softirq and process contexts when managing socket locks and backlog processing. In standard networking paths, the receive function operates within softirq context where bottom halves are disabled, but certain protocols may defer packet processing to process context through the socket backlog mechanism.

The technical flaw manifests when a PEP socket receives data that needs to be forwarded to a child socket, triggering sk_receive_skb() on that child socket. The problem occurs because the parent socket's release_sock() function uses spin_unlock_bh() which disables bottom halves before calling sk_backlog_rcv(), but when the child socket's slock is acquired via bh_lock_sock_nested(), it assumes bottom halves are already disabled. This creates a contradiction where the same lock can be held with different BH states - once with BH enabled in process context and once with BH disabled in softirq context. The locking subsystem (lockdep) detects this inconsistency as a potential deadlock scenario and flags it accordingly.

This vulnerability has serious operational implications for systems relying on phonet networking, particularly those handling concurrent socket operations where packets may be processed across different execution contexts. The self-deadlock condition can occur when a softirq attempts to process packets to the same child socket while its slock is already held in process context with BH enabled, effectively blocking system progress and potentially causing denial of service conditions. The issue impacts systems using phonet protocols for device communication, including various embedded networking scenarios.

The mitigation implemented involves wrapping the forwarded sk_receive_skb() call with local_bh_disable() and local_bh_enable() to ensure consistent BH state when acquiring the child socket's slock. This approach maintains the lock state consistency by guaranteeing that bottom halves are disabled during the critical section where the child socket lock is acquired, regardless of whether execution occurs in softirq or process context. The solution is designed to be safe for nesting on the softirq path and aligns with established kernel locking practices. This fix addresses the underlying CWE-664 issue related to improper resource locking and prevents the inconsistent lock state that could lead to system instability.

The vulnerability was discovered through systematic fuzzing using syzkaller, demonstrating the effectiveness of automated testing in identifying complex concurrency issues in kernel code. The reproduction under KASAN + LOCKDEP + PROVE_LOCKING environments confirms the theoretical nature of the issue and validates the fix's effectiveness. This case study highlights the importance of context-aware locking mechanisms in kernel networking code and demonstrates how seemingly minor implementation details can lead to significant system reliability problems. The fix also aligns with ATT&CK framework concepts related to privilege escalation through kernel vulnerabilities, as improper locking can potentially be exploited to gain elevated privileges or cause system instability in networked environments.

Responsible

Linux

Reservation

07/19/2026

Disclosure

07/19/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!