diff options
author | David S. Miller <davem@davemloft.net> | 2015-12-22 16:26:31 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-22 16:26:31 -0500 |
commit | 024f35c55233fb6041e2b31165271f5b941802e6 (patch) | |
tree | 10a167131329e876cb48ad8d4410b96c7d221265 /net/xfrm | |
parent | e459dfeeb64008b2d23bdf600f03b3605dbb8152 (diff) | |
parent | a8a572a6b5f2a79280d6e302cb3c1cb1fbaeb3e8 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
Steffen Klassert says:
====================
pull request (net): ipsec 2015-12-22
Just one patch to fix dst_entries_init with multiple namespaces.
From Dan Streetman.
Please pull or let me know if there are problems.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 38 |
1 files changed, 0 insertions, 38 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 948fa5560de5..b5e665b3cfb0 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -2826,7 +2826,6 @@ static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst, | |||
2826 | 2826 | ||
2827 | int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) | 2827 | int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) |
2828 | { | 2828 | { |
2829 | struct net *net; | ||
2830 | int err = 0; | 2829 | int err = 0; |
2831 | if (unlikely(afinfo == NULL)) | 2830 | if (unlikely(afinfo == NULL)) |
2832 | return -EINVAL; | 2831 | return -EINVAL; |
@@ -2857,26 +2856,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) | |||
2857 | } | 2856 | } |
2858 | spin_unlock(&xfrm_policy_afinfo_lock); | 2857 | spin_unlock(&xfrm_policy_afinfo_lock); |
2859 | 2858 | ||
2860 | rtnl_lock(); | ||
2861 | for_each_net(net) { | ||
2862 | struct dst_ops *xfrm_dst_ops; | ||
2863 | |||
2864 | switch (afinfo->family) { | ||
2865 | case AF_INET: | ||
2866 | xfrm_dst_ops = &net->xfrm.xfrm4_dst_ops; | ||
2867 | break; | ||
2868 | #if IS_ENABLED(CONFIG_IPV6) | ||
2869 | case AF_INET6: | ||
2870 | xfrm_dst_ops = &net->xfrm.xfrm6_dst_ops; | ||
2871 | break; | ||
2872 | #endif | ||
2873 | default: | ||
2874 | BUG(); | ||
2875 | } | ||
2876 | *xfrm_dst_ops = *afinfo->dst_ops; | ||
2877 | } | ||
2878 | rtnl_unlock(); | ||
2879 | |||
2880 | return err; | 2859 | return err; |
2881 | } | 2860 | } |
2882 | EXPORT_SYMBOL(xfrm_policy_register_afinfo); | 2861 | EXPORT_SYMBOL(xfrm_policy_register_afinfo); |
@@ -2912,22 +2891,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) | |||
2912 | } | 2891 | } |
2913 | EXPORT_SYMBOL(xfrm_policy_unregister_afinfo); | 2892 | EXPORT_SYMBOL(xfrm_policy_unregister_afinfo); |
2914 | 2893 | ||
2915 | static void __net_init xfrm_dst_ops_init(struct net *net) | ||
2916 | { | ||
2917 | struct xfrm_policy_afinfo *afinfo; | ||
2918 | |||
2919 | rcu_read_lock(); | ||
2920 | afinfo = rcu_dereference(xfrm_policy_afinfo[AF_INET]); | ||
2921 | if (afinfo) | ||
2922 | net->xfrm.xfrm4_dst_ops = *afinfo->dst_ops; | ||
2923 | #if IS_ENABLED(CONFIG_IPV6) | ||
2924 | afinfo = rcu_dereference(xfrm_policy_afinfo[AF_INET6]); | ||
2925 | if (afinfo) | ||
2926 | net->xfrm.xfrm6_dst_ops = *afinfo->dst_ops; | ||
2927 | #endif | ||
2928 | rcu_read_unlock(); | ||
2929 | } | ||
2930 | |||
2931 | static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr) | 2894 | static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr) |
2932 | { | 2895 | { |
2933 | struct net_device *dev = netdev_notifier_info_to_dev(ptr); | 2896 | struct net_device *dev = netdev_notifier_info_to_dev(ptr); |
@@ -3076,7 +3039,6 @@ static int __net_init xfrm_net_init(struct net *net) | |||
3076 | rv = xfrm_policy_init(net); | 3039 | rv = xfrm_policy_init(net); |
3077 | if (rv < 0) | 3040 | if (rv < 0) |
3078 | goto out_policy; | 3041 | goto out_policy; |
3079 | xfrm_dst_ops_init(net); | ||
3080 | rv = xfrm_sysctl_init(net); | 3042 | rv = xfrm_sysctl_init(net); |
3081 | if (rv < 0) | 3043 | if (rv < 0) |
3082 | goto out_sysctl; | 3044 | goto out_sysctl; |