Skip to content

Commit e940f5d

Browse files
liuhangbindavem330
authored andcommitted
ipv6: Fix MLD Query message check
Based on RFC3810 6.2, we also need to check the hop limit and router alert option besides source address. Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 3e215c8 commit e940f5d

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

net/ipv6/mcast.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,8 +1301,17 @@ int igmp6_event_query(struct sk_buff *skb)
13011301
len = ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr);
13021302
len -= skb_network_header_len(skb);
13031303

1304-
/* Drop queries with not link local source */
1305-
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL))
1304+
/* RFC3810 6.2
1305+
* Upon reception of an MLD message that contains a Query, the node
1306+
* checks if the source address of the message is a valid link-local
1307+
* address, if the Hop Limit is set to 1, and if the Router Alert
1308+
* option is present in the Hop-By-Hop Options header of the IPv6
1309+
* packet. If any of these checks fails, the packet is dropped.
1310+
*/
1311+
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL) ||
1312+
ipv6_hdr(skb)->hop_limit != 1 ||
1313+
!(IP6CB(skb)->flags & IP6SKB_ROUTERALERT) ||
1314+
IP6CB(skb)->ra != htons(IPV6_OPT_ROUTERALERT_MLD))
13061315
return -EINVAL;
13071316

13081317
idev = __in6_dev_get(skb->dev);

0 commit comments

Comments
 (0)