diff options
author | David Lebrun <david.lebrun@uclouvain.be> | 2017-04-18 11:59:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-04-20 15:40:33 -0400 |
commit | 2f3bb64247b5b083d05ccecad9c2e139bbfdc294 (patch) | |
tree | c430df72c12b236b7ff4c18145ff8cc1850e0129 | |
parent | c1f8d0f98c3bc12393821c1bf00d8eaa0bd58bd8 (diff) |
ipv6: sr: fix out-of-bounds access in SRH validation
This patch fixes an out-of-bounds access in seg6_validate_srh() when the
trailing data is less than sizeof(struct sr6_tlv).
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv6/seg6.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c index a855eb325b03..5f44ffed2576 100644 --- a/net/ipv6/seg6.c +++ b/net/ipv6/seg6.c | |||
@@ -53,6 +53,9 @@ bool seg6_validate_srh(struct ipv6_sr_hdr *srh, int len) | |||
53 | struct sr6_tlv *tlv; | 53 | struct sr6_tlv *tlv; |
54 | unsigned int tlv_len; | 54 | unsigned int tlv_len; |
55 | 55 | ||
56 | if (trailing < sizeof(*tlv)) | ||
57 | return false; | ||
58 | |||
56 | tlv = (struct sr6_tlv *)((unsigned char *)srh + tlv_offset); | 59 | tlv = (struct sr6_tlv *)((unsigned char *)srh + tlv_offset); |
57 | tlv_len = sizeof(*tlv) + tlv->len; | 60 | tlv_len = sizeof(*tlv) + tlv->len; |
58 | 61 | ||