aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet/af_packet.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2015-10-09 14:44:54 -0400
committerDavid S. Miller <davem@davemloft.net>2015-10-12 22:44:16 -0400
commit19bcf9f203c82c2028f5a0881b1f0690e3207190 (patch)
treea3d9cbc354d0c464f8485b298f25bab4bae7a73b /net/packet/af_packet.c
parent37fcbab61b8ecf75cb5fd81e5809b71c270f9632 (diff)
ipv4: Pass struct net into ip_defrag and ip_check_defrag
The function ip_defrag is called on both the input and the output paths of the networking stack. In particular conntrack when it is tracking outbound packets from the local machine calls ip_defrag. So add a struct net parameter and stop making ip_defrag guess which network namespace it needs to defragment packets in. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Acked-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r--net/packet/af_packet.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 396b3f1e7cc0..691660b9b7ef 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1439,17 +1439,17 @@ static int packet_rcv_fanout(struct sk_buff *skb, struct net_device *dev,
1439{ 1439{
1440 struct packet_fanout *f = pt->af_packet_priv; 1440 struct packet_fanout *f = pt->af_packet_priv;
1441 unsigned int num = READ_ONCE(f->num_members); 1441 unsigned int num = READ_ONCE(f->num_members);
1442 struct net *net = read_pnet(&f->net);
1442 struct packet_sock *po; 1443 struct packet_sock *po;
1443 unsigned int idx; 1444 unsigned int idx;
1444 1445
1445 if (!net_eq(dev_net(dev), read_pnet(&f->net)) || 1446 if (!net_eq(dev_net(dev), net) || !num) {
1446 !num) {
1447 kfree_skb(skb); 1447 kfree_skb(skb);
1448 return 0; 1448 return 0;
1449 } 1449 }
1450 1450
1451 if (fanout_has_flag(f, PACKET_FANOUT_FLAG_DEFRAG)) { 1451 if (fanout_has_flag(f, PACKET_FANOUT_FLAG_DEFRAG)) {
1452 skb = ip_check_defrag(skb, IP_DEFRAG_AF_PACKET); 1452 skb = ip_check_defrag(net, skb, IP_DEFRAG_AF_PACKET);
1453 if (!skb) 1453 if (!skb)
1454 return 0; 1454 return 0;
1455 } 1455 }