diff options
author | David S. Miller <davem@davemloft.net> | 2015-12-31 18:20:10 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-31 18:20:10 -0500 |
commit | c07f30ad68053181b3e8a0e65b0630e12e844f91 (patch) | |
tree | 8758968aabc844c435ff2a5d7d02c835fccd02a3 /net/ipv6 | |
parent | 7b22a7788b0263f42f7232c5c05c503424ffa0ba (diff) | |
parent | 9c982e86dbdbaa3fb248dfc776dddda32cbc8927 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/addrconf.c | 11 | ||||
-rw-r--r-- | net/ipv6/addrlabel.c | 2 | ||||
-rw-r--r-- | net/ipv6/ndisc.c | 4 | ||||
-rw-r--r-- | net/ipv6/xfrm6_policy.c | 53 |
4 files changed, 45 insertions, 25 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 819b7777f3cb..8697551b16a8 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -5415,13 +5415,10 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write, | |||
5415 | goto out; | 5415 | goto out; |
5416 | } | 5416 | } |
5417 | 5417 | ||
5418 | if (!write) { | 5418 | err = snprintf(str, sizeof(str), "%pI6", &secret->secret); |
5419 | err = snprintf(str, sizeof(str), "%pI6", | 5419 | if (err >= sizeof(str)) { |
5420 | &secret->secret); | 5420 | err = -EIO; |
5421 | if (err >= sizeof(str)) { | 5421 | goto out; |
5422 | err = -EIO; | ||
5423 | goto out; | ||
5424 | } | ||
5425 | } | 5422 | } |
5426 | 5423 | ||
5427 | err = proc_dostring(&lctl, write, buffer, lenp, ppos); | 5424 | err = proc_dostring(&lctl, write, buffer, lenp, ppos); |
diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c index 882124ebb438..a8f6986dcbe5 100644 --- a/net/ipv6/addrlabel.c +++ b/net/ipv6/addrlabel.c | |||
@@ -552,7 +552,7 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
552 | 552 | ||
553 | rcu_read_lock(); | 553 | rcu_read_lock(); |
554 | p = __ipv6_addr_label(net, addr, ipv6_addr_type(addr), ifal->ifal_index); | 554 | p = __ipv6_addr_label(net, addr, ipv6_addr_type(addr), ifal->ifal_index); |
555 | if (p && ip6addrlbl_hold(p)) | 555 | if (p && !ip6addrlbl_hold(p)) |
556 | p = NULL; | 556 | p = NULL; |
557 | lseq = ip6addrlbl_table.seq; | 557 | lseq = ip6addrlbl_table.seq; |
558 | rcu_read_unlock(); | 558 | rcu_read_unlock(); |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index d6161e1c48c8..84afb9a77278 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1183,7 +1183,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1183 | */ | 1183 | */ |
1184 | if (!in6_dev->cnf.accept_ra_from_local && | 1184 | if (!in6_dev->cnf.accept_ra_from_local && |
1185 | ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, | 1185 | ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, |
1186 | NULL, 0)) { | 1186 | in6_dev->dev, 0)) { |
1187 | ND_PRINTK(2, info, | 1187 | ND_PRINTK(2, info, |
1188 | "RA from local address detected on dev: %s: default router ignored\n", | 1188 | "RA from local address detected on dev: %s: default router ignored\n", |
1189 | skb->dev->name); | 1189 | skb->dev->name); |
@@ -1337,7 +1337,7 @@ skip_linkparms: | |||
1337 | #ifdef CONFIG_IPV6_ROUTE_INFO | 1337 | #ifdef CONFIG_IPV6_ROUTE_INFO |
1338 | if (!in6_dev->cnf.accept_ra_from_local && | 1338 | if (!in6_dev->cnf.accept_ra_from_local && |
1339 | ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, | 1339 | ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, |
1340 | NULL, 0)) { | 1340 | in6_dev->dev, 0)) { |
1341 | ND_PRINTK(2, info, | 1341 | ND_PRINTK(2, info, |
1342 | "RA from local address detected on dev: %s: router info ignored.\n", | 1342 | "RA from local address detected on dev: %s: router info ignored.\n", |
1343 | skb->dev->name); | 1343 | skb->dev->name); |
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 5643423fe67a..c074771a10f7 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c | |||
@@ -279,7 +279,7 @@ static void xfrm6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, | |||
279 | xfrm_dst_ifdown(dst, dev); | 279 | xfrm_dst_ifdown(dst, dev); |
280 | } | 280 | } |
281 | 281 | ||
282 | static struct dst_ops xfrm6_dst_ops = { | 282 | static struct dst_ops xfrm6_dst_ops_template = { |
283 | .family = AF_INET6, | 283 | .family = AF_INET6, |
284 | .gc = xfrm6_garbage_collect, | 284 | .gc = xfrm6_garbage_collect, |
285 | .update_pmtu = xfrm6_update_pmtu, | 285 | .update_pmtu = xfrm6_update_pmtu, |
@@ -293,7 +293,7 @@ static struct dst_ops xfrm6_dst_ops = { | |||
293 | 293 | ||
294 | static struct xfrm_policy_afinfo xfrm6_policy_afinfo = { | 294 | static struct xfrm_policy_afinfo xfrm6_policy_afinfo = { |
295 | .family = AF_INET6, | 295 | .family = AF_INET6, |
296 | .dst_ops = &xfrm6_dst_ops, | 296 | .dst_ops = &xfrm6_dst_ops_template, |
297 | .dst_lookup = xfrm6_dst_lookup, | 297 | .dst_lookup = xfrm6_dst_lookup, |
298 | .get_saddr = xfrm6_get_saddr, | 298 | .get_saddr = xfrm6_get_saddr, |
299 | .decode_session = _decode_session6, | 299 | .decode_session = _decode_session6, |
@@ -325,7 +325,7 @@ static struct ctl_table xfrm6_policy_table[] = { | |||
325 | { } | 325 | { } |
326 | }; | 326 | }; |
327 | 327 | ||
328 | static int __net_init xfrm6_net_init(struct net *net) | 328 | static int __net_init xfrm6_net_sysctl_init(struct net *net) |
329 | { | 329 | { |
330 | struct ctl_table *table; | 330 | struct ctl_table *table; |
331 | struct ctl_table_header *hdr; | 331 | struct ctl_table_header *hdr; |
@@ -353,7 +353,7 @@ err_alloc: | |||
353 | return -ENOMEM; | 353 | return -ENOMEM; |
354 | } | 354 | } |
355 | 355 | ||
356 | static void __net_exit xfrm6_net_exit(struct net *net) | 356 | static void __net_exit xfrm6_net_sysctl_exit(struct net *net) |
357 | { | 357 | { |
358 | struct ctl_table *table; | 358 | struct ctl_table *table; |
359 | 359 | ||
@@ -365,24 +365,52 @@ static void __net_exit xfrm6_net_exit(struct net *net) | |||
365 | if (!net_eq(net, &init_net)) | 365 | if (!net_eq(net, &init_net)) |
366 | kfree(table); | 366 | kfree(table); |
367 | } | 367 | } |
368 | #else /* CONFIG_SYSCTL */ | ||
369 | static int inline xfrm6_net_sysctl_init(struct net *net) | ||
370 | { | ||
371 | return 0; | ||
372 | } | ||
373 | |||
374 | static void inline xfrm6_net_sysctl_exit(struct net *net) | ||
375 | { | ||
376 | } | ||
377 | #endif | ||
378 | |||
379 | static int __net_init xfrm6_net_init(struct net *net) | ||
380 | { | ||
381 | int ret; | ||
382 | |||
383 | memcpy(&net->xfrm.xfrm6_dst_ops, &xfrm6_dst_ops_template, | ||
384 | sizeof(xfrm6_dst_ops_template)); | ||
385 | ret = dst_entries_init(&net->xfrm.xfrm6_dst_ops); | ||
386 | if (ret) | ||
387 | return ret; | ||
388 | |||
389 | ret = xfrm6_net_sysctl_init(net); | ||
390 | if (ret) | ||
391 | dst_entries_destroy(&net->xfrm.xfrm6_dst_ops); | ||
392 | |||
393 | return ret; | ||
394 | } | ||
395 | |||
396 | static void __net_exit xfrm6_net_exit(struct net *net) | ||
397 | { | ||
398 | xfrm6_net_sysctl_exit(net); | ||
399 | dst_entries_destroy(&net->xfrm.xfrm6_dst_ops); | ||
400 | } | ||
368 | 401 | ||
369 | static struct pernet_operations xfrm6_net_ops = { | 402 | static struct pernet_operations xfrm6_net_ops = { |
370 | .init = xfrm6_net_init, | 403 | .init = xfrm6_net_init, |
371 | .exit = xfrm6_net_exit, | 404 | .exit = xfrm6_net_exit, |
372 | }; | 405 | }; |
373 | #endif | ||
374 | 406 | ||
375 | int __init xfrm6_init(void) | 407 | int __init xfrm6_init(void) |
376 | { | 408 | { |
377 | int ret; | 409 | int ret; |
378 | 410 | ||
379 | dst_entries_init(&xfrm6_dst_ops); | ||
380 | |||
381 | ret = xfrm6_policy_init(); | 411 | ret = xfrm6_policy_init(); |
382 | if (ret) { | 412 | if (ret) |
383 | dst_entries_destroy(&xfrm6_dst_ops); | ||
384 | goto out; | 413 | goto out; |
385 | } | ||
386 | ret = xfrm6_state_init(); | 414 | ret = xfrm6_state_init(); |
387 | if (ret) | 415 | if (ret) |
388 | goto out_policy; | 416 | goto out_policy; |
@@ -391,9 +419,7 @@ int __init xfrm6_init(void) | |||
391 | if (ret) | 419 | if (ret) |
392 | goto out_state; | 420 | goto out_state; |
393 | 421 | ||
394 | #ifdef CONFIG_SYSCTL | ||
395 | register_pernet_subsys(&xfrm6_net_ops); | 422 | register_pernet_subsys(&xfrm6_net_ops); |
396 | #endif | ||
397 | out: | 423 | out: |
398 | return ret; | 424 | return ret; |
399 | out_state: | 425 | out_state: |
@@ -405,11 +431,8 @@ out_policy: | |||
405 | 431 | ||
406 | void xfrm6_fini(void) | 432 | void xfrm6_fini(void) |
407 | { | 433 | { |
408 | #ifdef CONFIG_SYSCTL | ||
409 | unregister_pernet_subsys(&xfrm6_net_ops); | 434 | unregister_pernet_subsys(&xfrm6_net_ops); |
410 | #endif | ||
411 | xfrm6_protocol_fini(); | 435 | xfrm6_protocol_fini(); |
412 | xfrm6_policy_fini(); | 436 | xfrm6_policy_fini(); |
413 | xfrm6_state_fini(); | 437 | xfrm6_state_fini(); |
414 | dst_entries_destroy(&xfrm6_dst_ops); | ||
415 | } | 438 | } |