diff options
author | Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> | 2021-06-28 16:13:42 -0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-06-28 15:34:50 -0700 |
commit | 50619dbf8db77e98d821d615af4f634d08e22698 (patch) | |
tree | c85866af2c925cd8dd7b65c634d0290de79f01ed /net | |
parent | 0c5dc070ff3d6246d22ddd931f23a6266249e3db (diff) | |
download | linux-stable-50619dbf8db77e98d821d615af4f634d08e22698.tar.gz linux-stable-50619dbf8db77e98d821d615af4f634d08e22698.tar.bz2 linux-stable-50619dbf8db77e98d821d615af4f634d08e22698.zip |
sctp: add size validation when walking chunks
The first chunk in a packet is ensured to be present at the beginning of
sctp_rcv(), as a packet needs to have at least 1 chunk. But the second
one, may not be completely available and ch->length can be over
uninitialized memory.
Fix here is by only trying to walk on the next chunk if there is enough to
hold at least the header, and then proceed with the ch->length validation
that is already there.
Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sctp/input.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c index 8924e2e142c8..f72bff93745c 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -1247,7 +1247,7 @@ static struct sctp_association *__sctp_rcv_walk_lookup(struct net *net, ch = (struct sctp_chunkhdr *)ch_end; chunk_num++; - } while (ch_end < skb_tail_pointer(skb)); + } while (ch_end + sizeof(*ch) < skb_tail_pointer(skb)); return asoc; } |