| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * IPv6 library code, needed by static components when full IPv6 support is |
|---|
| 3 | 4 | * not configured or static. |
|---|
| .. | .. |
|---|
| 142 | 143 | optlen = 1; |
|---|
| 143 | 144 | break; |
|---|
| 144 | 145 | default: |
|---|
| 146 | + if (len < 2) |
|---|
| 147 | + goto bad; |
|---|
| 145 | 148 | optlen = nh[offset + 1] + 2; |
|---|
| 146 | 149 | if (optlen > len) |
|---|
| 147 | 150 | goto bad; |
|---|
| .. | .. |
|---|
| 196 | 199 | struct ipv6hdr _ip6, *ip6; |
|---|
| 197 | 200 | |
|---|
| 198 | 201 | 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)) |
|---|
| 201 | 203 | return -EBADMSG; |
|---|
| 202 | | - } |
|---|
| 203 | 204 | start = *offset + sizeof(struct ipv6hdr); |
|---|
| 204 | 205 | nexthdr = ip6->nexthdr; |
|---|
| 205 | 206 | } |
|---|
| .. | .. |
|---|
| 265 | 266 | } else if (nexthdr == NEXTHDR_AUTH) { |
|---|
| 266 | 267 | if (flags && (*flags & IP6_FH_F_AUTH) && (target < 0)) |
|---|
| 267 | 268 | break; |
|---|
| 268 | | - hdrlen = (hp->hdrlen + 2) << 2; |
|---|
| 269 | + hdrlen = ipv6_authlen(hp); |
|---|
| 269 | 270 | } else |
|---|
| 270 | 271 | hdrlen = ipv6_optlen(hp); |
|---|
| 271 | 272 | |
|---|