Re: [PATCH net v2] sctp: revalidate output stream after association connect wait
From: Xin Long
Date: Thu Oct 08 2026 - 21:12:54 EST
On Tue, Oct 6, 2026 at 11:57 PM Daehyeon Ko <4ncienth@xxxxxxxxx> wrote:
>
> When message interleaving is enabled, the first send waits for association
> establishment before building its data chunks. The wait drops the socket
> lock, and handshake processing can reduce the output stream count to the
> peer-advertised inbound stream count. sctp_stream_init() then frees the
> extension of every removed stream.
>
> The sender resumes with the stream that it checked before the wait. If the
> peer removed that stream, sctp_outq_tail() later dereferences its NULL
> extension. Fatal-oops policies then panic the host.
>
> KASAN: null-ptr-deref in range [0x38-0x3f]
> RIP: sctp_outq_tail+0x49e/0xaa0
> Call Trace:
> sctp_primitive_SEND
> sctp_sendmsg_to_asoc
> sctp_sendmsg
>
> A range check alone is insufficient. Stream reconfiguration can grow the
> output count again while the lock is released without recreating extensions
> freed by the earlier shrink. The stream can then be in range while its
> extension remains NULL. The send-buffer wait has the same issue.
>
> Factor the range and extension checks into a helper and repeat both after
> each send-path wait that drops the socket lock. Once the lock is
> reacquired, the validation remains stable through data creation and
> queueing.
>
> If validation fails after the connect wait, the auto-created association is
> already established. Return ESRCH so the existing caller path keeps it
> under state-machine ownership instead of freeing it directly, which would
> leave protocol, counter and socket state inconsistent.
>
> Fixes: 668c9beb9020 ("sctp: implement assign_number for sctp_stream_interleave")
> Cc: stable@xxxxxxxxxxxxxxx
> Assisted-by: LLM
> Signed-off-by: Daehyeon Ko <4ncienth@xxxxxxxxx>
Acked-by: Xin Long <lucien.xin@xxxxxxxxx>