mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-11 22:37:04 +00:00
sctp: reinit stream if stream outcnt has been change by sinit in sendmsg
After introducing sctp_stream structure, sctp uses stream->outcnt as the out stream nums instead of c.sinit_num_ostreams. However when users use sinit in cmsg, it only updates c.sinit_num_ostreams in sctp_sendmsg. At that moment, stream->outcnt is still using previous value. If it's value is not updated, the sinit_num_ostreams of sinit could not really work. This patch is to fix it by updating stream->outcnt and reiniting stream if stream outcnt has been change by sinit in sendmsg. Fixes: a83863174a61 ("sctp: prepare asoc stream for stream reconf") Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3d1661304f
commit
625637bf4a
@ -1883,8 +1883,14 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
|
||||
*/
|
||||
if (sinit) {
|
||||
if (sinit->sinit_num_ostreams) {
|
||||
asoc->c.sinit_num_ostreams =
|
||||
sinit->sinit_num_ostreams;
|
||||
__u16 outcnt = sinit->sinit_num_ostreams;
|
||||
|
||||
asoc->c.sinit_num_ostreams = outcnt;
|
||||
/* outcnt has been changed, so re-init stream */
|
||||
err = sctp_stream_init(&asoc->stream, outcnt, 0,
|
||||
GFP_KERNEL);
|
||||
if (err)
|
||||
goto out_free;
|
||||
}
|
||||
if (sinit->sinit_max_instreams) {
|
||||
asoc->c.sinit_max_instreams =
|
||||
|
Loading…
x
Reference in New Issue
Block a user