HIGH Public PoC
af_unix SCCEntry UAF
CVE-2026-80521
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.3HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: af_unix: Unlink scc_entry in unix_del_edge(). Kyle Zeng reported that GC could free a dead SCC partially. The scenario is as follows: 1) Create two SCCs: X -. A <-> B ^--' 2) Run the following concurrently: 2-1) send() sk-B to sk-B from sk-X 2-2) close() both A and B At 2-1), there is a small window where unix_add_edges() publishes a new edge (B <-> B) to GC but its skb is not queued by skb_queue_tail(). If 2-2) completes before skb_queue_tail() and GC is triggered, it judges A <-> B as dead, but B is not freed because GC cannot collect the not-yet-queued skb holding the B <-> B edge. X -. A <-> B -. This edge is visible ^--' ^..' but skb is not This itself is not a problem since the next GC run will judge B as dead as well and free it finally. X -. A <.> B -. ^--' ^--' However, X's SCC forces the next GC to call unix_walk_scc_fast(), and it iterates over A through B's scc_entry. Let's unlink scc_entry before freeing the vertex in unix_del_edge().
02KernelScan AI Analysis
Risk summary
A race condition in the Unix domain socket garbage collector allows a local unprivileged user to trigger a use-after-free by concurrently sending to and closing sockets. The freed memory can be traversed by a subsequent GC iteration, leading to kernel memory corruption with potential for arbitrary read/write or denial of service. Any system with local user access is at risk.
Vulnerability analysis
When concurrent send and close operations occur on Unix domain sockets, a timing window exists where the garbage collector partially frees a dead group of connected sockets while one socket's list link remains in the collector's iteration list. A later garbage-collection pass traverses through that stale link into already-freed memory, causing a use-after-free. The fix removes the socket from the collector's list at the moment it is queued for teardown, so later iterations never reach freed memory. The vulnerability is reachable by any local user through standard Unix domain socket operations without special privileges or hardware.
Exploit availability
KernelScan found public exploit code for this CVE. Open it in the CVE browser to see what we found, where, and how strong the evidence is — that needs a free account with a confirmed email address.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.1 | 6.1.141 | 6.1.189 | 2b6c2842692d |
| 6.6 | 6.6.93 | 6.6.158 | 6fda5c51b8e4 |
| 6.12 | — | 6.12.111 | 1293fd69a50d |
| 6.18 | — | 6.18.53 | fe198b077864 |
| 7.1 | — | 7.1.10 | e3702470ced9 |
| mainline | — | 7.2 | 594d90519502 |
| cip/6.12 | — | 6.12.111-cip32 | 1293fd69a50d |