aboutsummaryrefslogtreecommitdiffstats
path: root/net/xfrm
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-12-22 16:26:31 -0500
committerDavid S. Miller <davem@davemloft.net>2015-12-22 16:26:31 -0500
commit024f35c55233fb6041e2b31165271f5b941802e6 (patch)
tree10a167131329e876cb48ad8d4410b96c7d221265 /net/xfrm
parente459dfeeb64008b2d23bdf600f03b3605dbb8152 (diff)
parenta8a572a6b5f2a79280d6e302cb3c1cb1fbaeb3e8 (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.c38
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
2827int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) 2827int 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}
2882EXPORT_SYMBOL(xfrm_policy_register_afinfo); 2861EXPORT_SYMBOL(xfrm_policy_register_afinfo);
@@ -2912,22 +2891,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
2912} 2891}
2913EXPORT_SYMBOL(xfrm_policy_unregister_afinfo); 2892EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
2914 2893
2915static 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
2931static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr) 2894static 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;