---
id: "CVE-2026-99056"
kind: "vulnerability"
aliases: ["CVE-2026-99056"]
title: "Linux kernel: strparser race lets use-after-free in espintcp be exploited"
severity: "unknown"
cvss: null
epss: 0.00209
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["espintcp", "linux-kernel", "runtime"]
not_affected_if: ["espintcp-unused"]
published_at: "2026-10-23T13:17:29+00:00"
first_seen_at: "2026-10-23T21:57:33+00:00"
updated_at: "2026-10-25T12:38:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99056", "first_seen_at": "2026-10-23T21:57:33+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-99056", "first_seen_at": "2026-10-25T12:38:50+00:00"}]
---

# Linux kernel: strparser race lets use-after-free in espintcp be exploited

A race in the Linux kernel's strparser stream parser can run a receive callback after the parser is torn down, causing a use-after-free. A published reproducer turns it into an exploit, per the advisory text.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Run `uname -r` and compare against the fixed kernel versions listed by the distribution or NVD entry (unknown from these sources).
- Check whether the espintcp module is loaded with `lsmod | grep espintcp`; only espintcp is named as affected.

## Fix

- Update the Linux kernel to a release that includes the upstream strparser fix (fixed version: unknown from these sources).
- Until patched, unload the espintcp module if it is not needed (unknown from these sources whether this fully mitigates).

## Timeline

- 2026-10-23T21:57:33+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99056
- 2026-10-25T12:38:50+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-99056

## From the sources

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

strparser: make sure __strp_recv isn't running before tearing down the parser

The comment above strp_done() claims that if strp is stopped,
strp_recv will no longer be called. That's only true if the caller has
a mechanism (eg locking) to guarantee that strp_recv() calls that
started before strp_stop() have completed by the time we call
strp_done().

This adds a dummy lock_sock/release_sock pair to guarantee that any
in-flight strp_recv() (which runs under either bh_lock_sock or
lock_sock, depending if it's called from ->sk_data_ready or strp_work)
has completed.

Only espintcp can be affected by this race condition, but this patch
makes sure no future user of strp can have the bug.

This could crash on strp->sk ("general mode" of strp), but this mode
has been here for 9 years and has never been used. It'll be gone soon,
no point worrying about it.

Switch the stopped/paused/etc bits to u8's to avoid races between
strp_stop() and strp_pause/unpause().

A reproducer has been published and turns the possible UAF into an
exploit [1].

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
