CVEvulnerability
CVE-2026-89479
9.8 CRITICAL
Official page ↗
- Status
- Received
- Published
- 2026-09-11
- Last modified
- 2026-10-19
- Assigner
- 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- CVSS 3.1 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)
- 9.8 CRITICAL — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Description
In the Linux kernel, the following vulnerability has been resolved:
sctp: stop processing a packet once its association is deleted
sctp_endpoint_bh_rcv() looks the association up only when chunk->asoc is
NULL, and caches the result in chunk->asoc and chunk->transport without
taking a reference.
A packet that matches no association is handed to the endpoint, so a peer
can bundle COOKIE ECHO, SHUTDOWN and SHUTDOWN ACK in one packet. The
COOKIE ECHO creates the association, the SHUTDOWN chunk caches it, and
with the outqueue empty the SHUTDOWN ACK reaches sctp_sf_do_9_2_final(),
so the association and its transports are freed.
The endpoint loop has no counterpart to the asoc->base.dead check in
sctp_assoc_bh_rcv(). The next chunk writes to last_time_heard in the freed
transport and is then passed to sctp_do_sm() with the freed association.
The transport is freed through RCU, so this needs the packet to come off
the socket backlog, where the loop runs in task context.
The endpoint loop cannot do the same check: it holds no reference on the
association, so reading asoc->base.dead would itself be a use-after-free.
Mark the packet for discard in the command interpreter, just before it
deletes the association. That is also before sctp_inq_free() releases the
chunk on the association receive path.
sctp_sf_do_5_2_4_dupcook() issues SCTP_CMD_DELETE_TCB for the temporary
association, while the one the packet belongs to stays alive. A restarting
peer can bundle DATA behind its COOKIE ECHO, so compare against
chunk->asoc and leave that case alone.
References
- https://git.kernel.org/stable/c/09c3b193a3e8fe53e1f416e2f8e3283d2a785405 git.kernel.org
- https://git.kernel.org/stable/c/47e15a8d12e366d0d261bcbc394394f44418938d git.kernel.org
- https://git.kernel.org/stable/c/5c0b2dbbdafc9eeeb11fffe1e46551fc3b55d8ee git.kernel.org
- https://git.kernel.org/stable/c/7d970353eeb98f46a3b9dc602850e4f6336a9889 git.kernel.org
- https://git.kernel.org/stable/c/a713e1b3a265f180ad25a08e17be15d67a2f7149 git.kernel.org
- https://git.kernel.org/stable/c/ed85fe91a61bc0e0da6b585c07102b20f4cc65a0 git.kernel.org
- https://git.kernel.org/stable/c/ee3f04cf566f6041aa9a0360494fd8db5ade383a git.kernel.org
- https://git.kernel.org/stable/c/fa306a40e716c5abcd967475459ce1ebd56e5115 git.kernel.org