diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ndisc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 7968bfec6138..44e5b7f2a6c1 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1221,6 +1221,9 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1221 | if (!in6_dev->cnf.accept_ra_defrtr) | 1221 | if (!in6_dev->cnf.accept_ra_defrtr) |
1222 | goto skip_defrtr; | 1222 | goto skip_defrtr; |
1223 | 1223 | ||
1224 | if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, NULL, 0)) | ||
1225 | goto skip_defrtr; | ||
1226 | |||
1224 | lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); | 1227 | lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); |
1225 | 1228 | ||
1226 | #ifdef CONFIG_IPV6_ROUTER_PREF | 1229 | #ifdef CONFIG_IPV6_ROUTER_PREF |
@@ -1343,6 +1346,9 @@ skip_linkparms: | |||
1343 | goto out; | 1346 | goto out; |
1344 | 1347 | ||
1345 | #ifdef CONFIG_IPV6_ROUTE_INFO | 1348 | #ifdef CONFIG_IPV6_ROUTE_INFO |
1349 | if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, NULL, 0)) | ||
1350 | goto skip_routeinfo; | ||
1351 | |||
1346 | if (in6_dev->cnf.accept_ra_rtr_pref && ndopts.nd_opts_ri) { | 1352 | if (in6_dev->cnf.accept_ra_rtr_pref && ndopts.nd_opts_ri) { |
1347 | struct nd_opt_hdr *p; | 1353 | struct nd_opt_hdr *p; |
1348 | for (p = ndopts.nd_opts_ri; | 1354 | for (p = ndopts.nd_opts_ri; |
@@ -1360,6 +1366,8 @@ skip_linkparms: | |||
1360 | &ipv6_hdr(skb)->saddr); | 1366 | &ipv6_hdr(skb)->saddr); |
1361 | } | 1367 | } |
1362 | } | 1368 | } |
1369 | |||
1370 | skip_routeinfo: | ||
1363 | #endif | 1371 | #endif |
1364 | 1372 | ||
1365 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 1373 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |