diff options
author | Xin Long <lucien.xin@gmail.com> | 2017-03-29 20:00:53 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-30 21:08:47 +0300 |
commit | 3dbcc105d5561e18ccd0842c7baab1c835562a37 (patch) | |
tree | a4612311dc9f7acaeb1a7130c56f4e63323305f8 /net/sctp/sm_make_chunk.c | |
parent | bcc5364bdcfe131e6379363f089e7b4108d35b70 (diff) | |
download | linux-3dbcc105d5561e18ccd0842c7baab1c835562a37.tar.xz |
sctp: alloc stream info when initializing asoc
When sending a msg without asoc established, sctp will send INIT packet
first and then enqueue chunks.
Before receiving INIT_ACK, stream info is not yet alloced. But enqueuing
chunks needs to access stream info, like out stream state and out stream
cnt.
This patch is to fix it by allocing out stream info when initializing an
asoc, allocing in stream and re-allocing out stream when processing init.
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/sm_make_chunk.c')
-rw-r--r-- | net/sctp/sm_make_chunk.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 969a30c7bb54..118faff6a332 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c @@ -2460,15 +2460,10 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, * association. */ if (!asoc->temp) { - int error; - - asoc->stream = sctp_stream_new(asoc->c.sinit_max_instreams, - asoc->c.sinit_num_ostreams, gfp); - if (!asoc->stream) + if (sctp_stream_init(asoc, gfp)) goto clean_up; - error = sctp_assoc_set_id(asoc, gfp); - if (error) + if (sctp_assoc_set_id(asoc, gfp)) goto clean_up; } |