hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/net/ipv6/exthdrs_core.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * IPv6 library code, needed by static components when full IPv6 support is
34 * not configured or static.
....@@ -142,6 +143,8 @@
142143 optlen = 1;
143144 break;
144145 default:
146
+ if (len < 2)
147
+ goto bad;
145148 optlen = nh[offset + 1] + 2;
146149 if (optlen > len)
147150 goto bad;
....@@ -196,10 +199,8 @@
196199 struct ipv6hdr _ip6, *ip6;
197200
198201 ip6 = skb_header_pointer(skb, *offset, sizeof(_ip6), &_ip6);
199
- if (!ip6 || (ip6->version != 6)) {
200
- printk(KERN_ERR "IPv6 header not found\n");
202
+ if (!ip6 || (ip6->version != 6))
201203 return -EBADMSG;
202
- }
203204 start = *offset + sizeof(struct ipv6hdr);
204205 nexthdr = ip6->nexthdr;
205206 }
....@@ -265,7 +266,7 @@
265266 } else if (nexthdr == NEXTHDR_AUTH) {
266267 if (flags && (*flags & IP6_FH_F_AUTH) && (target < 0))
267268 break;
268
- hdrlen = (hp->hdrlen + 2) << 2;
269
+ hdrlen = ipv6_authlen(hp);
269270 } else
270271 hdrlen = ipv6_optlen(hp);
271272