summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Laight <David.Laight@ACULAB.COM>2020-08-19 14:40:52 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-08-27 09:30:48 +0200
commiteb1a1c016ebadf87db872785f4bb4e1a80039c75 (patch)
tree50d7b510ab26aeb51d65a54628ca5db47a277db6
parentbfc6e25c15f8575a7122ecdc69dfa953f7853847 (diff)
downloadlinux-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.c6
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;
}