summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Lebrun <david.lebrun@uclouvain.be>2017-04-18 17:59:49 +0200
committerDavid S. Miller <davem@davemloft.net>2017-04-20 21:40:33 +0200
commit2f3bb64247b5b083d05ccecad9c2e139bbfdc294 (patch)
treec430df72c12b236b7ff4c18145ff8cc1850e0129
parentselftests/net: Fixes psock_fanout CBPF test case (diff)
downloadlinux-2f3bb64247b5b083d05ccecad9c2e139bbfdc294.tar.xz
linux-2f3bb64247b5b083d05ccecad9c2e139bbfdc294.zip
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.c3
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)
struct sr6_tlv *tlv;
unsigned int tlv_len;
+ if (trailing < sizeof(*tlv))
+ return false;
+
tlv = (struct sr6_tlv *)((unsigned char *)srh + tlv_offset);
tlv_len = sizeof(*tlv) + tlv->len;