[NET]: Make packet reception network namespace safe
This patch modifies every packet receive function registered with dev_add_pack() to drop packets if they are not from the initial network namespace. This should ensure that the various network stacks do not receive packets in a anything but the initial network namespace until the code has been converted and is ready for them. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
6d34b1c27a
commit
e730c15519
@@ -36,6 +36,7 @@
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/hdlc.h>
|
||||
#include <net/net_namespace.h>
|
||||
|
||||
|
||||
static const char* version = "HDLC support module revision 1.21";
|
||||
@@ -66,6 +67,12 @@ static int hdlc_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *p, struct net_device *orig_dev)
|
||||
{
|
||||
struct hdlc_device_desc *desc = dev_to_desc(dev);
|
||||
|
||||
if (dev->nd_net != &init_net) {
|
||||
kfree_skb(skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (desc->netif_rx)
|
||||
return desc->netif_rx(skb);
|
||||
|
||||
|
@@ -91,6 +91,9 @@ static int lapbeth_rcv(struct sk_buff *skb, struct net_device *dev, struct packe
|
||||
int len, err;
|
||||
struct lapbethdev *lapbeth;
|
||||
|
||||
if (dev->nd_net != &init_net)
|
||||
goto drop;
|
||||
|
||||
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
|
||||
return NET_RX_DROP;
|
||||
|
||||
|
@@ -51,6 +51,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/syncppp.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
@@ -1445,6 +1446,11 @@ static void sppp_print_bytes (u_char *p, u16 len)
|
||||
|
||||
static int sppp_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *p, struct net_device *orig_dev)
|
||||
{
|
||||
if (dev->nd_net != &init_net) {
|
||||
kfree_skb(skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
|
||||
return NET_RX_DROP;
|
||||
sppp_input(dev,skb);
|
||||
|
Reference in New Issue
Block a user