diff options
author | David Laight <David.Laight@ACULAB.COM> | 2020-08-19 14:40:52 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-08-27 09:30:48 +0200 |
commit | eb1a1c016ebadf87db872785f4bb4e1a80039c75 (patch) | |
tree | 50d7b510ab26aeb51d65a54628ca5db47a277db6 | |
parent | bfc6e25c15f8575a7122ecdc69dfa953f7853847 (diff) | |
download | linux-stable-eb1a1c016ebadf87db872785f4bb4e1a80039c75.tar.gz linux-stable-eb1a1c016ebadf87db872785f4bb4e1a80039c75.tar.bz2 linux-stable-eb1a1c016ebadf87db872785f4bb4e1a80039c75.zip |
net: sctp: Fix negotiation of the number of data streams.
[ Upstream commit ab921f3cdbec01c68705a7ade8bec628d541fc2b ]
The number of output and input streams was never being reduced, eg when
processing received INIT or INIT_ACK chunks.
The effect is that DATA chunks can be sent with invalid stream ids
and then discarded by the remote system.
Fixes: 2075e50caf5ea ("sctp: convert to genradix")
Signed-off-by: David Laight <david.laight@aculab.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | net/sctp/stream.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/sctp/stream.c b/net/sctp/stream.c index bda2536dd740..6dc95dcc0ff4 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c @@ -88,12 +88,13 @@ static int sctp_stream_alloc_out(struct sctp_stream *stream, __u16 outcnt, int ret; if (outcnt <= stream->outcnt) - return 0; + goto out; ret = genradix_prealloc(&stream->out, outcnt, gfp); if (ret) return ret; +out: stream->outcnt = outcnt; return 0; } @@ -104,12 +105,13 @@ static int sctp_stream_alloc_in(struct sctp_stream *stream, __u16 incnt, int ret; if (incnt <= stream->incnt) - return 0; + goto out; ret = genradix_prealloc(&stream->in, incnt, gfp); if (ret) return ret; +out: stream->incnt = incnt; return 0; } |