diff options
| -rw-r--r-- | net/ipv6/mcast.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 883bf65c3ae5..af95ae08ff0d 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c @@ -1017,7 +1017,9 @@ int igmp6_event_query(struct sk_buff *skb) if (!pskb_may_pull(skb, sizeof(struct in6_addr))) return -EINVAL; - len = ntohs(skb->nh.ipv6h->payload_len); + /* compute payload length excluding extension headers */ + len = ntohs(skb->nh.ipv6h->payload_len) + sizeof(struct ipv6hdr); + len -= (char *)skb->h.raw - (char *)skb->nh.ipv6h; /* Drop queries with not link local source */ if (!(ipv6_addr_type(&skb->nh.ipv6h->saddr)&IPV6_ADDR_LINKLOCAL)) |
