CVE-2026-31411

Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
08/04/2026
Last modified:
08/04/2026

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> net: atm: fix crash due to unvalidated vcc pointer in sigd_send()<br /> <br /> Reproducer available at [1].<br /> <br /> The ATM send path (sendmsg -&gt; vcc_sendmsg -&gt; sigd_send) reads the vcc<br /> pointer from msg-&gt;vcc and uses it directly without any validation. This<br /> pointer comes from userspace via sendmsg() and can be arbitrarily forged:<br /> <br /> int fd = socket(AF_ATMSVC, SOCK_DGRAM, 0);<br /> ioctl(fd, ATMSIGD_CTRL); // become ATM signaling daemon<br /> struct msghdr msg = { .msg_iov = &amp;iov, ... };<br /> *(unsigned long *)(buf + 4) = 0xdeadbeef; // fake vcc pointer<br /> sendmsg(fd, &amp;msg, 0); // kernel dereferences 0xdeadbeef<br /> <br /> In normal operation, the kernel sends the vcc pointer to the signaling<br /> daemon via sigd_enq() when processing operations like connect(), bind(),<br /> or listen(). The daemon is expected to return the same pointer when<br /> responding. However, a malicious daemon can send arbitrary pointer values.<br /> <br /> Fix this by introducing find_get_vcc() which validates the pointer by<br /> searching through vcc_hash (similar to how sigd_close() iterates over<br /> all VCCs), and acquires a reference via sock_hold() if found.<br /> <br /> Since struct atm_vcc embeds struct sock as its first member, they share<br /> the same lifetime. Therefore using sock_hold/sock_put is sufficient to<br /> keep the vcc alive while it is being used.<br /> <br /> Note that there may be a race with sigd_close() which could mark the vcc<br /> with various flags (e.g., ATM_VF_RELEASED) after find_get_vcc() returns.<br /> However, sock_hold() guarantees the memory remains valid, so this race<br /> only affects the logical state, not memory safety.<br /> <br /> [1]: https://gist.github.com/mrpre/1ba5949c45529c511152e2f4c755b0f3

Impact