LiveActive security incident?Get immediate response
CVE Record

CVE-2026-23394: af_unix: Give up GC if MSG_PEEK intervened.

In the Linux kernel, the following vulnerability has been resolved: af_unix: Give up GC if MSG_PEEK intervened. Igor Ushakov reported that GC purged the receive queue of an alive socket due to a race with MSG_PEEK with a nice repro. This is the exact same issue previously fixed by commit cbcf01128d0a ("af_unix: fix garbage collect vs MSG_PEEK"). After GC was replaced with the current algorithm, the cited commit removed the locking dance in unix_peek_fds() and reintroduced the same issue. The problem is that MSG_PEEK bumps a file refcount without interacting with GC. Consider an SCC containing sk-A and sk-B, where sk-A is close()d but can be recv()ed via sk-B. The bad thing happens if sk-A is recv()ed with MSG_PEEK from sk-B and sk-B is close()d while GC is checking unix_vertex_dead() for sk-A and sk-B. GC thread User thread --------- ----------- unix_vertex_dead(sk-A) -> true <------. \ `------ recv(sk-B, MSG_PEEK) invalidate !! -> sk-A's file refcount : 1 -> 2 close(sk-B) -> sk-B's file refcount : 2 -> 1 unix_vertex_dead(sk-B) -> true Initially, sk-A's file refcount is 1 by the inflight fd in sk-B recvq. GC thinks sk-A is dead because the file refcount is the same as the number of its inflight fds. However, sk-A's file refcount is bumped silently by MSG_PEEK, which invalidates the previous evaluation. At this moment, sk-B's file refcount is 2; one by the open fd, and one by the inflight fd in sk-A. The subsequent close() releases one refcount by the former. Finally, GC incorrectly concludes that both sk-A and sk-B are dead. One option is to restore the locking dance in unix_peek_fds(), but we can resolve this more elegantly thanks to the new algorithm. The point is that the issue does not occur without the subsequent close() and we actually do not need to synchronise MSG_PEEK with the dead SCC detection. When the issue occurs, close() and GC touch the same file refcount. If GC sees the refcount being decremented by close(), it can just give up garbage-collecting the SCC. Therefore, we only need to signal the race during MSG_PEEK with a proper memory barrier to make it visible to the GC. Let's use seqcount_t to notify GC when MSG_PEEK occurs and let it defer the SCC to the next run. This way no locking is needed on the MSG_PEEK side, and we can avoid imposing a penalty on every MSG_PEEK unnecessarily. Note that we can retry within unix_scc_dead() if MSG_PEEK is detected, but we do not do so to avoid hung task splat from abusive MSG_PEEK calls.

UnknownCVSS not scoredNot KEV-listedUpdated
Glexia's TakeAutomated analysisunknown

Security readout for executives and security teams

Plain-English summary

Linux can mistakenly discard a live UNIX-domain socket receive queue during a narrowly timed interaction between garbage collection, MSG_PEEK, and socket closure. This may disrupt software using local sockets and passed file descriptors. Available evidence does not quantify severity or demonstrate privilege escalation, memory corruption, remote compromise, or data disclosure.

Executive priority

Schedule accelerated kernel validation and maintenance, especially for multi-tenant or untrusted-workload hosts. The evidence does not support emergency internet-wide incident handling, but the demonstrated kernel race warrants remediation. Reassess priority if a distribution publishes a high severity rating, broader impact, or exploitation evidence.

Technical view

A race in Linux AF_UNIX garbage collection can invalidate liveness checks. MSG_PEEK increments a file reference while GC evaluates a strongly connected socket component; a concurrent close can make GC misclassify live sockets as dead and purge a live receive queue. The fix uses a sequence counter so GC detects interference and defers collection.

Likely exposure

The condition requires an affected Linux kernel and workloads able to exercise AF_UNIX descriptor passing, MSG_PEEK, socket closure, and garbage collection concurrently. Hosts running complex or untrusted local workloads may deserve earlier review. The bundle mixes commit hashes and release identifiers, so exact affected ranges require vendor confirmation.

Exploitation context

The bundle reports a reproducer demonstrating the race, but provides no evidence of malicious exploitation. CVE-2026-23394 is not identified as KEV. Trigger feasibility does not establish a practical security exploit, and the sources do not define required privileges or effects beyond incorrect receive-queue purging.

Researcher notes

This is described as a regression of the issue previously fixed by commit cbcf01128d0a after replacement of the garbage-collection algorithm. The new fix signals MSG_PEEK interference and defers collection. Missing evidence includes CVSS, CWE, normalized affected ranges, privilege requirements, and security impact beyond receive-queue purging.

Mitigation direction

  • Upgrade to a vendor-supported kernel package containing the applicable AF_UNIX stable fix.
  • Consult the Linux distribution's advisory or changelog to resolve the bundle's ambiguous version information.
  • Prioritize multi-tenant systems and hosts permitting untrusted local workloads.
  • Do not treat workload restrictions as a substitute for installing the vendor-confirmed fix.

Validation and detection

  • Inventory running kernel releases and package builds across Linux systems.
  • Check vendor advisories or package changelogs for CVE-2026-23394 and the listed stable commits.
  • After updating and rebooting, confirm the running kernel is the remediated build.
  • Regression-test legitimate AF_UNIX descriptor-passing and MSG_PEEK workloads after updating.
Prepared
Confidence
medium
Sources
8

Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.

Potential ATT&CK relevance

Conservative CVE-to-ATT&CK context

These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.

ATT&CK lookup starting points

Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.

cve · low confidence lookup

CVE-2026-23394 mapping review

Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.

Open ATT&CK lookup
Vulnerability profileCVE Program record
Severity
Unknown
CVSS
Not scored
Known Exploited
No
Published
Official CVE source material

CNA and ADP enrichment extracted from CVE v5

These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.

0CVSS vectors
3Timeline events
0ADP providers
7Source links

Vulnerability timeline

Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.

  1. CVE reservedCVE Program

    The CVE ID was reserved by the assigning CNA.

  2. CVE publishedCVE Program

    The CVE record was published.

  3. CVE updatedCVE Program

    The CVE record metadata indicates this as the latest update time.

Affected products

Products and packages named in the record

VendorProductVersion / packageStatus
LinuxLinux61a75360dca93c945ef6bd757f8b8a96f39b77cb, 7b1ffbd3b22e755d481d49647dcb7c5cfbde5844, 118f457da9ed58a79e24b73c2ef0aa1987241f0e, 118f457da9ed58a79e24b73c2ef0aa1987241f0e, 118f457da9ed58a79e24b73c2ef0aa1987241f0e, 118f457da9ed58a79e24b73c2ef0aa1987241f0e, 6.1.141, 6.6.93unaffected
LinuxLinux6.10, 0, 6.1.183, 6.6.142, 6.12.92, 6.18.23, 6.19.10, 7.0affected
Weakness

CWE details

No CWE listed

CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.