* RE: [patch 29/32] NET: Fix race condition about network device name allocation.
@ 2007-06-08 14:34 koan
2007-06-08 16:34 ` Chris Wright
0 siblings, 1 reply; 3+ messages in thread
From: koan @ 2007-06-08 14:34 UTC (permalink / raw)
To: linux-kernel
Hello,
I get a compilation failure from the patch:
CC net/core/stream.o
CC net/core/scm.o
CC net/core/gen_stats.o
CC net/core/gen_estimator.o
CC net/core/sysctl_net_core.o
CC net/core/dev.o
net/core/dev.c: In function 'netdev_run_todo':
net/core/dev.c:3155: error: 'struct net_device' has no member named 'dev'
make[2]: *** [net/core/dev.o] Error 1
make[1]: *** [net/core] Error 2
make: *** [net] Error 2
Thanks, Jesse
(I am not on list, please CC me with replies)
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch 29/32] NET: Fix race condition about network device name allocation.
2007-06-08 14:34 [patch 29/32] NET: Fix race condition about network device name allocation koan
@ 2007-06-08 16:34 ` Chris Wright
0 siblings, 0 replies; 3+ messages in thread
From: Chris Wright @ 2007-06-08 16:34 UTC (permalink / raw)
To: koan; +Cc: linux-kernel, stable, shemminger
* koan (koan00@gmail.com) wrote:
> I get a compilation failure from the patch:
>
> CC net/core/stream.o
> CC net/core/scm.o
> CC net/core/gen_stats.o
> CC net/core/gen_estimator.o
> CC net/core/sysctl_net_core.o
> CC net/core/dev.o
> net/core/dev.c: In function 'netdev_run_todo':
> net/core/dev.c:3155: error: 'struct net_device' has no member named 'dev'
> make[2]: *** [net/core/dev.o] Error 1
> make[1]: *** [net/core] Error 2
> make: *** [net] Error 2
Yes, that's a terrible backport from me. I'm testing this one now,
and may simply drop it.
--
From: Stephen Hemminger <shemminger@linux-foundation.org>
Kenji Kaneshige found this race between device removal and
registration. On unregister it is possible for the old device to
exist, because sysfs file is still open. A new device with 'eth%d'
will select the same name, but sysfs kobject register will fial.
The following changes the shutdown order slightly. It hold a removes
the sysfs entries earlier (on unregister_netdevice), but holds a
kobject reference. Then when todo runs the actual last put free
happens.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
[chrisw: backport to 2.6.20]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
net/core/dev.c | 10 ++++++----
net/core/net-sysfs.c | 8 +++++++-
2 files changed, 13 insertions(+), 5 deletions(-)
--- linux-2.6.20.13.orig/net/core/dev.c
+++ linux-2.6.20.13/net/core/dev.c
@@ -3138,7 +3138,6 @@ void netdev_run_todo(void)
continue;
}
- netdev_unregister_sysfs(dev);
dev->reg_state = NETREG_UNREGISTERED;
netdev_wait_allrefs(dev);
@@ -3149,11 +3148,11 @@ void netdev_run_todo(void)
BUG_TRAP(!dev->ip6_ptr);
BUG_TRAP(!dev->dn_ptr);
- /* It must be the very last action,
- * after this 'dev' may point to freed up memory.
- */
if (dev->destructor)
dev->destructor(dev);
+
+ /* Free network device */
+ kobject_put(&dev->class_dev.kobj);
}
out:
@@ -3310,6 +3309,9 @@ int unregister_netdevice(struct net_devi
/* Notifier chain MUST detach us from master device. */
BUG_TRAP(!dev->master);
+ /* Remove entries from sysfs */
+ netdev_unregister_sysfs(dev);
+
/* Finish processing unregister after unlock */
net_set_todo(dev);
--- linux-2.6.20.13.orig/net/core/net-sysfs.c
+++ linux-2.6.20.13/net/core/net-sysfs.c
@@ -440,9 +440,15 @@ static struct class net_class = {
#endif
};
+/* Delete sysfs entries but hold kobject reference until after all
+ * netdev references are gone.
+ */
void netdev_unregister_sysfs(struct net_device * net)
{
- class_device_del(&(net->class_dev));
+ struct class_device *dev = &(net->class_dev);
+
+ kobject_get(&dev->kobj);
+ class_device_del(dev);
}
/* Create sysfs entries for network device. */
^ permalink raw reply [flat|nested] 3+ messages in thread
* [patch 00/32] 2.6.20-stable review
@ 2007-06-08 7:15 Chris Wright
2007-06-08 7:15 ` [patch 29/32] NET: Fix race condition about network device name allocation Chris Wright
0 siblings, 1 reply; 3+ messages in thread
From: Chris Wright @ 2007-06-08 7:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
Chuck Ebbert, Domenico Andreoli, torvalds, akpm, alan
This is the start of the stable review cycle for the 2.6.20.14 release.
There are 32 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let us know. If anyone is a maintainer of the proper subsystem, and
wants to add a Signed-off-by: line to the patch, please respond with it.
These patches are sent out with a number of different people on the
Cc: line. If you wish to be a reviewer, please email stable@kernel.org
to add your name to the list. If you want to be off the reviewer list,
also email us.
Responses should be made by Sun Jun 10 07:15 UTC.
Anything received after that time might be too late.
thanks,
the -stable release team
--
^ permalink raw reply [flat|nested] 3+ messages in thread
* [patch 29/32] NET: Fix race condition about network device name allocation.
2007-06-08 7:15 [patch 00/32] 2.6.20-stable review Chris Wright
@ 2007-06-08 7:15 ` Chris Wright
0 siblings, 0 replies; 3+ messages in thread
From: Chris Wright @ 2007-06-08 7:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
Chuck Ebbert, Domenico Andreoli, torvalds, akpm, alan,
David Miller, bunk, Stephen Hemminger
[-- Attachment #1: net-fix-race-condition-about-network-device-name-allocation.patch --]
[-- Type: text/plain, Size: 2329 bytes --]
-stable review patch. If anyone has any objections, please let us know.
---------------------
From: Stephen Hemminger <shemminger@linux-foundation.org>
Kenji Kaneshige found this race between device removal and
registration. On unregister it is possible for the old device to
exist, because sysfs file is still open. A new device with 'eth%d'
will select the same name, but sysfs kobject register will fial.
The following changes the shutdown order slightly. It hold a removes
the sysfs entries earlier (on unregister_netdevice), but holds a
kobject reference. Then when todo runs the actual last put free
happens.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
[chrisw: backport to 2.6.20]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
net/core/dev.c | 10 ++++++----
net/core/net-sysfs.c | 8 +++++++-
2 files changed, 13 insertions(+), 5 deletions(-)
--- linux-2.6.20.13.orig/net/core/dev.c
+++ linux-2.6.20.13/net/core/dev.c
@@ -3138,7 +3138,6 @@ void netdev_run_todo(void)
continue;
}
- netdev_unregister_sysfs(dev);
dev->reg_state = NETREG_UNREGISTERED;
netdev_wait_allrefs(dev);
@@ -3149,11 +3148,11 @@ void netdev_run_todo(void)
BUG_TRAP(!dev->ip6_ptr);
BUG_TRAP(!dev->dn_ptr);
- /* It must be the very last action,
- * after this 'dev' may point to freed up memory.
- */
if (dev->destructor)
dev->destructor(dev);
+
+ /* Free network device */
+ kobject_put(&dev->dev.kobj);
}
out:
@@ -3310,6 +3309,9 @@ int unregister_netdevice(struct net_devi
/* Notifier chain MUST detach us from master device. */
BUG_TRAP(!dev->master);
+ /* Remove entries from sysfs */
+ netdev_unregister_sysfs(dev);
+
/* Finish processing unregister after unlock */
net_set_todo(dev);
--- linux-2.6.20.13.orig/net/core/net-sysfs.c
+++ linux-2.6.20.13/net/core/net-sysfs.c
@@ -440,9 +440,15 @@ static struct class net_class = {
#endif
};
+/* Delete sysfs entries but hold kobject reference until after all
+ * netdev references are gone.
+ */
void netdev_unregister_sysfs(struct net_device * net)
{
- class_device_del(&(net->class_dev));
+ struct device *dev = &(net->dev);
+
+ kobject_get(&dev->kobj);
+ device_del(dev);
}
/* Create sysfs entries for network device. */
--
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-06-08 16:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-06-08 14:34 [patch 29/32] NET: Fix race condition about network device name allocation koan
2007-06-08 16:34 ` Chris Wright
-- strict thread matches above, loose matches on Subject: below --
2007-06-08 7:15 [patch 00/32] 2.6.20-stable review Chris Wright
2007-06-08 7:15 ` [patch 29/32] NET: Fix race condition about network device name allocation Chris Wright
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®