CVE-2026-46227: sctp: revalidate list cursor after sctp_sendmsg_to_asoc() in SCTP_SENDALL
In the Linux kernel, the following vulnerability has been resolved:
sctp: revalidate list cursor after sctpsendmsgtoasoc() in SCTPSENDALL
The SCTPSENDALL path in sctpsendmsg() iterates ep->asocs with listforeachentrysafe(), which caches the next entry in @tmp before the loop body runs. The body calls sctpsendmsgtoasoc(), which may drop the socket lock inside sctpwaitforsndbuf().
While the lock is dropped, another thread can SCTPSOCKOPTPEELOFF the association cached in @tmp, migrating it to a new endpoint via sctpsockmigrate() (listdelinit() + listaddtail() to newep->asocs), and optionally close the new socket which frees the association via kfreercu(). The cached @tmp can also be freed by a network ABORT for that association, processed in softirq while the lock is dropped.
sctpwaitforsndbuf() revalidates @asoc (the current entry) on re-lock via the "sk != asoc->base.sk" and "asoc->base.dead" checks, but nothing revalidates @tmp. After a successful return, the iterator advances to the stale @tmp, yielding either a use-after-free (if the peeled socket was closed) or a list-walk onto the new endpoint's list head (type confusion of &newep->asocs as a struct sctpassociation ).
Both are reachable from CapEff=0; the type-confusion path gives controlled indirect call via the outqueue.sched->initsid pointer.
Fix by re-deriving @tmp from @asoc after sctpsendmsgtoasoc() returns. @asoc is known to still be on ep->asocs at that point: the only callers that listdel an association from ep->asocs are sctpassociationfree() (which sets asoc->base.dead) and sctpassocmigrate() (which changes asoc->base.sk), and sctpwaitforsndbuf() checks both under the lock before any successful return; a tripped check propagates as err < 0 and the loop bails before the re-derive.
The SCTPABORT path in sctpsendmsgchecksflags() returns 0 and the loop hits 'continue' before sctpsendmsgtoasoc() is ever called, so the @tmp cached by listforeachentrysafe() still covers the lock-held free that ba59fb027307 ("sctp: walk the list of asoc safely") was added for.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 6.6.141.1-1 - Upgrade
Upgrade
Linux kernel (SCTP)to a version that resolves this vulnerability.Patch ba59fb027307
Event History
Frequently Asked Questions
What is the severity of CVE-2026-46227?
The severity of CVE-2026-46227 is high, with a CVSS score of 7.8.
How do I fix CVE-2026-46227?
To fix CVE-2026-46227, update the Linux kernel to a version that includes the patch for this vulnerability.
What are the potential impacts of CVE-2026-46227?
CVE-2026-46227 may allow for potential remote code execution due to a use after free vulnerability in the SCTP protocol.
Is my system vulnerable to CVE-2026-46227?
Systems running affected versions of the Linux kernel and using SCTP may be vulnerable to CVE-2026-46227.
When was CVE-2026-46227 published?
CVE-2026-46227 was published on May 28, 2026.