lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 11 Apr 2008 00:09:55 +0200 (CEST) From: "Daniel Hokka Zakrisson" <daniel@...ac.com> To: "Pavel Emelyanov" <xemul@...nvz.org> Cc: "Linux Netdev List" <netdev@...r.kernel.org>, "Linux Containers" <containers@...ts.osdl.org>, "Denis Lunev" <den@...nvz.org>, "Benjamin Thery" <benjamin.thery@...l.net> Subject: Re: [PATCH 6/14][RTNL]: Introduce the rtnl_kill_links call. Pavel Emelyanov wrote: > ... which will kill all the devices in the given net with > the given rtnl_link_ops. Will be used in VLAN patches later. > > Signed-off-by: Pavel Emelyanov <xemul@...nvz.org> > > --- > include/net/rtnetlink.h | 1 + > net/core/rtnetlink.c | 29 +++++++++++++++++++++-------- > 2 files changed, 22 insertions(+), 8 deletions(-) > > diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h > index 793863e..3c1895e 100644 > --- a/include/net/rtnetlink.h > +++ b/include/net/rtnetlink.h > @@ -74,6 +74,7 @@ struct rtnl_link_ops { > > extern int __rtnl_link_register(struct rtnl_link_ops *ops); > extern void __rtnl_link_unregister(struct rtnl_link_ops *ops); > +extern void rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops); > > extern int rtnl_link_register(struct rtnl_link_ops *ops); > extern void rtnl_link_unregister(struct rtnl_link_ops *ops); > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > index da99ac0..bc39e41 100644 > --- a/net/core/rtnetlink.c > +++ b/net/core/rtnetlink.c > @@ -269,6 +269,26 @@ int rtnl_link_register(struct rtnl_link_ops *ops) > > EXPORT_SYMBOL_GPL(rtnl_link_register); > > +static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) > +{ > + struct net_device *dev; > +restart: > + for_each_netdev(net, dev) { > + if (dev->rtnl_link_ops == ops) { > + ops->dellink(dev); > + goto restart; > + } > + } > +} > + > +void rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) > +{ > + rtnl_lock(); > + __rtnl_kill_links(net, ops); > + rtnl_unlock(); > +} > +EXPORT_SYMBOL_GPL(rtnl_kill_links); > + > /** > * __rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink. > * @ops: struct rtnl_link_ops * to unregister > @@ -277,17 +297,10 @@ EXPORT_SYMBOL_GPL(rtnl_link_register); > */ > void __rtnl_link_unregister(struct rtnl_link_ops *ops) > { > - struct net_device *dev, *n; > struct net *net; > > for_each_net(net) { > -restart: > - for_each_netdev_safe(net, dev, n) { > - if (dev->rtnl_link_ops == ops) { > - ops->dellink(dev); > - goto restart; > - } > - } > + __rtnl_kill_links(net, ops); This was _safe, and now it's not. Is that intentional? > } > list_del(&ops->list); > } > -- > 1.5.3.4 -- Daniel Hokka Zakrisson -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists