[SRU][J][PATCH v3 0/2] CVE-2026-53246
Mehmet Basaran
mehmet.basaran at canonical.com
Thu Aug 6 09:49:29 UTC 2026
https://ubuntu.com/security/CVE-2026-53246
[Impact]
ubuntu_ltp_syscalls:bind04 test timeouts on openstack vms while trying
to establish a stcp connections regardless of the architecture:
bind04.c:117: TINFO: Testing AF_UNIX pathname stream
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing AF_UNIX pathname seqpacket
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing AF_UNIX abstract stream
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing AF_UNIX abstract seqpacket
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing IPv4 loop TCP variant 1
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing IPv4 loop TCP variant 2
bind04.c:149: TPASS: Communication successful
bind04.c:117: TINFO: Testing IPv4 loop SCTP
Test timeouted, sending SIGKILL!
tst_test.c:1928: TINFO: If you are running on slow machine, try exporting LTP_TIMEOUT_MUL > 1
tst_test.c:1930: TBROK: Test killed! (timeout?)
[Fix]
git bisect reveals that breaking commit was applied with CVE-2026-53246:
Upstream commit: 0861615c28de668669d748ef4eb913ea9262d13b
sctp: validate cached peer INIT chunk length in COOKIE_ECHO processing
keybele missed the following dependency while backporting:
Upstream commit: 0861615c28de668669d748ef4eb913ea9262d13b
sctp: delete the nested flexible array peer_init
Basically dependency patch removes the last field "peer_init" from
struct sctp_cookie (include/net/sctp/structs.h) but the data is still
appended at the end and accesses to that data with
"(struct sctp_cookie *) + 1".
Breaking commit tries to access this data with the same pointer math
however, since "peer_init" field is not removed from struct sctp_cookie
it ends up accessing to a different memory address.
An alternative way to solve the issue is to use a sauce patch with the
following change:
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -1780,6 +1780,6 @@ struct sctp_association *sctp_unpack_cookie(
cookie = chunk->subh.cookie_hdr;
bear_cookie = &cookie->c;
- ch = (struct sctp_chunkhdr *)(bear_cookie + 1);
+ ch = (struct sctp_chunkhdr *) &cookie->c.peer_init[0];
if (ntohs(ch->length) > len - fixed_size)
[Test Plan]
Both solutions above work. Tested it by building a new kernel and trying
it on openstack:amd64-vm.
In this submission, I went with applying the missing patch instead so
that we don't deviate from the upstream sources.
[Where problems could occur]
This change is related the inital handshaking phase of sctp. There
shouldn't be any sideaffects of this change, after the handshake
completes.
Moreover, "sctp: delete the nested flexible array peer_init" removes
"peer_init" from struct sctp_cookie and replaces all the accesses no
risk is involved with this change.
Xin Long (2):
sctp: delete the nested flexible array peer_init
sctp: validate cached peer INIT chunk length in COOKIE_ECHO processing
include/net/sctp/structs.h | 2 +-
net/sctp/associola.c | 5 +++--
net/sctp/sm_make_chunk.c | 9 +++++++--
net/sctp/sm_statefuns.c | 8 +++-----
4 files changed, 14 insertions(+), 10 deletions(-)
--
2.43.0
More information about the kernel-team
mailing list