From: Xin Long <lucien.xin@xxxxxxxxx> Date: Wed, 17 Oct 2018 03:06:12 +0800 > When sctp_wait_for_connect is called to wait for connect ready > for sp->strm_interleave in sctp_sendmsg_to_asoc, a panic could > be triggered if cpu is scheduled out and the new asoc is freed > elsewhere, as it will return err and later the asoc gets freed > again in sctp_sendmsg. ... > This is a similar issue with the one fixed in Commit ca3af4dd28cf > ("sctp: do not free asoc when it is already dead in sctp_sendmsg"). > But this one can't be fixed by returning -ESRCH for the dead asoc > in sctp_wait_for_connect, as it will break sctp_connect's return > value to users. > > This patch is to simply set err to -ESRCH before it returns to > sctp_sendmsg when any err is returned by sctp_wait_for_connect > for sp->strm_interleave, so that no asoc would be freed due to > this. > > When users see this error, they will know the packet hasn't been > sent. And it also makes sense to not free asoc because waiting > connect fails, like the second call for sctp_wait_for_connect in > sctp_sendmsg_to_asoc. > > Fixes: 668c9beb9020 ("sctp: implement assign_number for sctp_stream_interleave") > Signed-off-by: Xin Long <lucien.xin@xxxxxxxxx> Applied and queued up for -stable.