Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipv4, ipv6: Pass net into ip_local_out and ip6_local_out

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric W. Biederman and committed by
David S. Miller
33224b16 cf91a99d

+25 -27
+2 -2
drivers/net/ipvlan/ipvlan_core.c
··· 365 365 } 366 366 skb_dst_drop(skb); 367 367 skb_dst_set(skb, &rt->dst); 368 - err = ip_local_out(skb->sk, skb); 368 + err = ip_local_out(net, skb->sk, skb); 369 369 if (unlikely(net_xmit_eval(err))) 370 370 dev->stats.tx_errors++; 371 371 else ··· 403 403 } 404 404 skb_dst_drop(skb); 405 405 skb_dst_set(skb, dst); 406 - err = ip6_local_out(skb->sk, skb); 406 + err = ip6_local_out(net, skb->sk, skb); 407 407 if (unlikely(net_xmit_eval(err))) 408 408 dev->stats.tx_errors++; 409 409 else
+1 -1
drivers/net/ppp/pptp.c
··· 283 283 ip_select_ident(net, skb, NULL); 284 284 ip_send_check(iph); 285 285 286 - ip_local_out(skb->sk, skb); 286 + ip_local_out(net, skb->sk, skb); 287 287 return 1; 288 288 289 289 tx_error:
+2 -2
drivers/net/vrf.c
··· 76 76 77 77 static int vrf_ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb) 78 78 { 79 - return ip_local_out(sk, skb); 79 + return ip_local_out(net, sk, skb); 80 80 } 81 81 82 82 static unsigned int vrf_v4_mtu(const struct dst_entry *dst) ··· 222 222 RT_SCOPE_LINK); 223 223 } 224 224 225 - ret = ip_local_out(skb->sk, skb); 225 + ret = ip_local_out(dev_net(skb_dst(skb)->dev), skb->sk, skb); 226 226 if (unlikely(net_xmit_eval(ret))) 227 227 vrf_dev->stats.tx_errors++; 228 228 else
+1 -1
include/net/ip.h
··· 113 113 int (*output)(struct net *, struct sock *, struct sk_buff *)); 114 114 void ip_send_check(struct iphdr *ip); 115 115 int __ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb); 116 - int ip_local_out(struct sock *sk, struct sk_buff *skb); 116 + int ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb); 117 117 118 118 int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl); 119 119 void ip_init(void);
+1 -1
include/net/ip6_tunnel.h
··· 87 87 int pkt_len, err; 88 88 89 89 pkt_len = skb->len - skb_inner_network_offset(skb); 90 - err = ip6_local_out(sk, skb); 90 + err = ip6_local_out(dev_net(skb_dst(skb)->dev), sk, skb); 91 91 92 92 if (net_xmit_eval(err) == 0) { 93 93 struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
+1 -1
include/net/ipv6.h
··· 866 866 int ip6_mc_input(struct sk_buff *skb); 867 867 868 868 int __ip6_local_out(struct net *net, struct sock *sk, struct sk_buff *skb); 869 - int ip6_local_out(struct sock *sk, struct sk_buff *skb); 869 + int ip6_local_out(struct net *net, struct sock *sk, struct sk_buff *skb); 870 870 871 871 /* 872 872 * Extension header (options) processing
+2 -2
net/ipv4/igmp.c
··· 397 397 398 398 pig->csum = ip_compute_csum(igmp_hdr(skb), igmplen); 399 399 400 - return ip_local_out(skb->sk, skb); 400 + return ip_local_out(dev_net(skb_dst(skb)->dev), skb->sk, skb); 401 401 } 402 402 403 403 static int grec_size(struct ip_mc_list *pmc, int type, int gdel, int sdel) ··· 739 739 ih->group = group; 740 740 ih->csum = ip_compute_csum((void *)ih, sizeof(struct igmphdr)); 741 741 742 - return ip_local_out(skb->sk, skb); 742 + return ip_local_out(net, skb->sk, skb); 743 743 } 744 744 745 745 static void igmp_gq_timer_expire(unsigned long data)
+4 -5
net/ipv4/ip_output.c
··· 107 107 dst_output); 108 108 } 109 109 110 - int ip_local_out(struct sock *sk, struct sk_buff *skb) 110 + int ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb) 111 111 { 112 - struct net *net = dev_net(skb_dst(skb)->dev); 113 112 int err; 114 113 115 114 err = __ip_local_out(net, sk, skb); ··· 168 169 skb->mark = sk->sk_mark; 169 170 170 171 /* Send it out. */ 171 - return ip_local_out(skb->sk, skb); 172 + return ip_local_out(net, skb->sk, skb); 172 173 } 173 174 EXPORT_SYMBOL_GPL(ip_build_and_send_pkt); 174 175 ··· 456 457 skb->priority = sk->sk_priority; 457 458 skb->mark = sk->sk_mark; 458 459 459 - res = ip_local_out(sk, skb); 460 + res = ip_local_out(net, sk, skb); 460 461 rcu_read_unlock(); 461 462 return res; 462 463 ··· 1436 1437 { 1437 1438 int err; 1438 1439 1439 - err = ip_local_out(skb->sk, skb); 1440 + err = ip_local_out(net, skb->sk, skb); 1440 1441 if (err) { 1441 1442 if (err > 0) 1442 1443 err = net_xmit_errno(err);
+1 -1
net/ipv4/ip_tunnel_core.c
··· 79 79 iph->ttl = ttl; 80 80 __ip_select_ident(net, iph, skb_shinfo(skb)->gso_segs ?: 1); 81 81 82 - err = ip_local_out(sk, skb); 82 + err = ip_local_out(net, sk, skb); 83 83 if (unlikely(net_xmit_eval(err))) 84 84 pkt_len = 0; 85 85 return pkt_len;
+1 -1
net/ipv4/netfilter/ipt_SYNPROXY.c
··· 63 63 nf_conntrack_get(nfct); 64 64 } 65 65 66 - ip_local_out(nskb->sk, nskb); 66 + ip_local_out(net, nskb->sk, nskb); 67 67 return; 68 68 69 69 free_nskb:
+1 -1
net/ipv4/netfilter/nf_dup_ipv4.c
··· 92 92 93 93 if (nf_dup_ipv4_route(net, skb, gw, oif)) { 94 94 __this_cpu_write(nf_skb_duplicated, true); 95 - ip_local_out(skb->sk, skb); 95 + ip_local_out(net, skb->sk, skb); 96 96 __this_cpu_write(nf_skb_duplicated, false); 97 97 } else { 98 98 kfree_skb(skb);
+1 -1
net/ipv4/netfilter/nf_reject_ipv4.c
··· 157 157 dev_queue_xmit(nskb); 158 158 } else 159 159 #endif 160 - ip_local_out(nskb->sk, nskb); 160 + ip_local_out(net, nskb->sk, nskb); 161 161 162 162 return; 163 163
+1 -1
net/ipv6/ip6_output.c
··· 1692 1692 struct rt6_info *rt = (struct rt6_info *)skb_dst(skb); 1693 1693 int err; 1694 1694 1695 - err = ip6_local_out(skb->sk, skb); 1695 + err = ip6_local_out(net, skb->sk, skb); 1696 1696 if (err) { 1697 1697 if (err > 0) 1698 1698 err = net_xmit_errno(err);
+1 -1
net/ipv6/netfilter/ip6t_SYNPROXY.c
··· 76 76 nf_conntrack_get(nfct); 77 77 } 78 78 79 - ip6_local_out(nskb->sk, nskb); 79 + ip6_local_out(net, nskb->sk, nskb); 80 80 return; 81 81 82 82 free_nskb:
+1 -1
net/ipv6/netfilter/nf_dup_ipv6.c
··· 68 68 } 69 69 if (nf_dup_ipv6_route(net, skb, gw, oif)) { 70 70 __this_cpu_write(nf_skb_duplicated, true); 71 - ip6_local_out(skb->sk, skb); 71 + ip6_local_out(net, skb->sk, skb); 72 72 __this_cpu_write(nf_skb_duplicated, false); 73 73 } else { 74 74 kfree_skb(skb);
+1 -1
net/ipv6/netfilter/nf_reject_ipv6.c
··· 206 206 dev_queue_xmit(nskb); 207 207 } else 208 208 #endif 209 - ip6_local_out(nskb->sk, nskb); 209 + ip6_local_out(net, nskb->sk, nskb); 210 210 } 211 211 EXPORT_SYMBOL_GPL(nf_send_reset6); 212 212
+1 -2
net/ipv6/output_core.c
··· 154 154 } 155 155 EXPORT_SYMBOL_GPL(__ip6_local_out); 156 156 157 - int ip6_local_out(struct sock *sk, struct sk_buff *skb) 157 + int ip6_local_out(struct net *net, struct sock *sk, struct sk_buff *skb) 158 158 { 159 - struct net *net = dev_net(skb_dst(skb)->dev); 160 159 int err; 161 160 162 161 err = __ip6_local_out(net, sk, skb);
+2 -2
net/netfilter/ipvs/ip_vs_xmit.c
··· 1049 1049 1050 1050 ret = ip_vs_tunnel_xmit_prepare(skb, cp); 1051 1051 if (ret == NF_ACCEPT) 1052 - ip_local_out(skb->sk, skb); 1052 + ip_local_out(net, skb->sk, skb); 1053 1053 else if (ret == NF_DROP) 1054 1054 kfree_skb(skb); 1055 1055 rcu_read_unlock(); ··· 1141 1141 1142 1142 ret = ip_vs_tunnel_xmit_prepare(skb, cp); 1143 1143 if (ret == NF_ACCEPT) 1144 - ip6_local_out(skb->sk, skb); 1144 + ip6_local_out(cp->ipvs->net, skb->sk, skb); 1145 1145 else if (ret == NF_DROP) 1146 1146 kfree_skb(skb); 1147 1147 rcu_read_unlock();