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

af_unix: Update last skb marker in manage_oob().

Fahad Alharbi reported that blocking recv(MSG_PEEK) could hog CPU
due to OOB skb.

In the following cases, manage_oob() skips OOB skb(s) and returns
NULL for the last recv(MSG_PEEK):

socketpair(AF_UNIX, SOCK_STREAM, 0, sk);

1) skb -> OOB skb -> NULL
send(sk[0], "ab", 2, MSG_OOB);
recv(sk[1], buf, 0, MSG_PEEK);

2) skb -> consumed OOB skb -> NULL
send(sk[0], "ab", 2, MSG_OOB);
recv(sk[1], buf, 1, MSG_OOB);
recv(sk[1], buf, 0, MSG_PEEK);

3) consumed OOB skb -> OOB skb -> NULL
send(sk[0], "a", 1, MSG_OOB);
recv(sk[1], buf, 0, MSG_OOB);
send(sk[0], "b", 1, MSG_OOB);
recv(sk[1], buf, 1, MSG_PEEK);

Then, @copied is 0 in unix_stream_read_generic() (zero-length buffer,
or non-OOB skb is not yet consumed), and unix_stream_data_wait() is
called.

However, it returns immediately because @last is not updated in
unix_stream_read_generic(), and the thread busy-waits for a new skb.

Let's update @last in manage_oob().

For MSG_PEEK, @last is updated with the skipped OOB, and for the
non-peek case, @last matches the returned value (when !copied)
because OOB is unlinked.

Note that manage_oob() is inlined and no stack canary is added.
Published: 2026-09-25
Score: 5.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Patch
AI Analysis

Impact

The vulnerability lies in the Linux kernel's handling of out‑of‑band (OOB) sockets for AF_UNIX streams. When a process performs a recv() with MSG_PEEK after an OOB packet has been sent, the kernel incorrectly skips the OOB buffer and returns NULL instead of updating its last‑seen marker. This causes the read routine to enter a busy‑wait loop that continuously consumes CPU without progressing. An attacker can trigger this behavior by creating a local socket pair and sending one or more OOB packets as described, causing the system to cycle through the busy‑wait state and saturate the processor. The direct outcome is a denial of service manifested as extreme CPU usage, which can degrade or halt other legitimate workloads.

Affected Systems

Linux kernel implementations are affected, as the advisory lists Linux:Linux as the CNA vendor/product. No specific kernel version list is supplied, so any kernel that has not yet incorporated the commit that updates the last skb marker may be vulnerable. This includes a broad range of distributions that ship the standard upstream kernel.

Risk and Exploitability

The CVSS score of 5.5 and an EPSS score of < 1% indicate a moderate severity with a low likelihood of exploitation. The bug still requires only local code execution to trigger the CPU‑hungry busy‑wait; an attacker with local access can quickly force the system into a DoS state. The vendor has not listed the advisory in the CISA KEV catalog, but the impact is enough to disrupt critical services. The fix is a kernel patch that correctly updates the last skb marker; until that change is applied, the vulnerability remains exploitable locally.

Generated by OpenCVE AI on October 1, 2026 at 04:21 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to a version that includes the commit referenced in the advisory (0630bfc773d85ac44da05b2c5a037dbbd39301ab).
  • Restart affected services or reboot the system after the kernel update to clear any lingering busy‑waiting threads.
  • If an immediate kernel upgrade is not possible, modify applications to avoid using MSG_PEEK on AF_UNIX sockets until the patch is applied.

Generated by OpenCVE AI on October 1, 2026 at 04:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4817-1 linux-6.12 security update
Debian DSA Debian DSA DSA-6528-1 linux security update
History

Wed, 30 Sep 2026 12:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-835
References
Metrics threat_severity

None

cvssV3_1

{'score': 5.5, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Low


Fri, 25 Sep 2026 10:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: af_unix: Update last skb marker in manage_oob(). Fahad Alharbi reported that blocking recv(MSG_PEEK) could hog CPU due to OOB skb. In the following cases, manage_oob() skips OOB skb(s) and returns NULL for the last recv(MSG_PEEK): socketpair(AF_UNIX, SOCK_STREAM, 0, sk); 1) skb -> OOB skb -> NULL send(sk[0], "ab", 2, MSG_OOB); recv(sk[1], buf, 0, MSG_PEEK); 2) skb -> consumed OOB skb -> NULL send(sk[0], "ab", 2, MSG_OOB); recv(sk[1], buf, 1, MSG_OOB); recv(sk[1], buf, 0, MSG_PEEK); 3) consumed OOB skb -> OOB skb -> NULL send(sk[0], "a", 1, MSG_OOB); recv(sk[1], buf, 0, MSG_OOB); send(sk[0], "b", 1, MSG_OOB); recv(sk[1], buf, 1, MSG_PEEK); Then, @copied is 0 in unix_stream_read_generic() (zero-length buffer, or non-OOB skb is not yet consumed), and unix_stream_data_wait() is called. However, it returns immediately because @last is not updated in unix_stream_read_generic(), and the thread busy-waits for a new skb. Let's update @last in manage_oob(). For MSG_PEEK, @last is updated with the skipped OOB, and for the non-peek case, @last matches the returned value (when !copied) because OOB is unlinked. Note that manage_oob() is inlined and no stack canary is added.
Title af_unix: Update last skb marker in manage_oob().
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-25T10:23:20.173Z

Reserved: 2026-09-25T10:18:58.208Z

Link: CVE-2026-97985

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-25T11:17:26.560

Modified: 2026-09-25T11:17:26.560

Link: CVE-2026-97985

cve-icon Redhat

Severity : Low

Publid Date: 2026-09-25T00:00:00Z

Links: CVE-2026-97985 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-01T04:30:18Z

Weaknesses
  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')