diff mbox series

net: sctp: Fix negotiation of the number of data streams - backport request

Message ID c5b2080a713e4bb9be1a7def413561de@AcuMS.aculab.com
State New
Headers show
Series net: sctp: Fix negotiation of the number of data streams - backport request | expand

Commit Message

David Laight Oct. 13, 2020, 10:32 a.m. UTC
This commit needs backporting to 5.1 through 5.8.
Do you need me to find the patch email or is this
with the full commit id enough?

	David

commit	ab921f3cdbec01c68705a7ade8bec628d541fc2b (patch)

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>

Diffstat (limited to 'net/sctp/stream.c')
-rw-r--r--	net/sctp/stream.c	6	

---

1 files changed, 4 insertions, 2 deletions

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

Comments

Jakub Kicinski Oct. 13, 2020, 11:38 p.m. UTC | #1
On Tue, 13 Oct 2020 10:32:13 +0000 David Laight wrote:
> This commit needs backporting to 5.1 through 5.8.
> Do you need me to find the patch email or is this
> with the full commit id enough?

I'll queue it up, thanks!
diff mbox series

Patch

diff --git a/net/sctp/stream.c b/net/sctp/stream.c
index bda2536dd740f..6dc95dcc0ff4f 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;
 }