aboutsummaryrefslogtreecommitdiffstats
path: root/net/atm
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-09-12 07:02:17 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:49:09 -0400
commite9dc86534051b78e41e5b746cccc291b57a3a311 (patch)
tree1cd4a1dde4c51b6311749428a22cc8a8f5436825 /net/atm
parente730c15519d09ea528b4d2f1103681fa5937c0e6 (diff)
[NET]: Make device event notification network namespace safe
Every user of the network device notifiers is either a protocol stack or a pseudo device. If a protocol stack that does not have support for multiple network namespaces receives an event for a device that is not in the initial network namespace it quite possibly can get confused and do the wrong thing. To avoid problems until all of the protocol stacks are converted this patch modifies all netdev event handlers to ignore events on devices that are not in the initial network namespace. As the rest of the code is made network namespace aware these checks can be removed. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/atm')
-rw-r--r--net/atm/clip.c3
-rw-r--r--net/atm/mpc.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/net/atm/clip.c b/net/atm/clip.c
index 806ea98567c6..741742f00797 100644
--- a/net/atm/clip.c
+++ b/net/atm/clip.c
@@ -612,6 +612,9 @@ static int clip_device_event(struct notifier_block *this, unsigned long event,
612{ 612{
613 struct net_device *dev = arg; 613 struct net_device *dev = arg;
614 614
615 if (dev->nd_net != &init_net)
616 return NOTIFY_DONE;
617
615 if (event == NETDEV_UNREGISTER) { 618 if (event == NETDEV_UNREGISTER) {
616 neigh_ifdown(&clip_tbl, dev); 619 neigh_ifdown(&clip_tbl, dev);
617 return NOTIFY_DONE; 620 return NOTIFY_DONE;
diff --git a/net/atm/mpc.c b/net/atm/mpc.c
index 7c85aa551d5e..0968430a7f58 100644
--- a/net/atm/mpc.c
+++ b/net/atm/mpc.c
@@ -956,6 +956,10 @@ static int mpoa_event_listener(struct notifier_block *mpoa_notifier, unsigned lo
956 struct lec_priv *priv; 956 struct lec_priv *priv;
957 957
958 dev = (struct net_device *)dev_ptr; 958 dev = (struct net_device *)dev_ptr;
959
960 if (dev->nd_net != &init_net)
961 return NOTIFY_DONE;
962
959 if (dev->name == NULL || strncmp(dev->name, "lec", 3)) 963 if (dev->name == NULL || strncmp(dev->name, "lec", 3))
960 return NOTIFY_DONE; /* we are only interested in lec:s */ 964 return NOTIFY_DONE; /* we are only interested in lec:s */
961 965