[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110516144647.13838.40897.stgit@localhost6.localdomain6>
Date: Mon, 16 May 2011 17:46:47 +0300
From: Kalle Valo <kvalo@...rom.com>
To: netdev@...r.kernel.org
Cc: linux-wireless@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH v3 2/2] net: postpone net device uevent to fix a race
From: Kalle Valo <kalle.valo@...eros.com>
There's a race in register_netdevice() so that the udev event is sent before
the device is actually ready. This was visible with flimflam, chrome os
connection manager:
00:21:35 roska flimflamd[2598]: src/udev.c:add_net_device()
00:21:35 roska flimflamd[2598]: connman_inet_ifname: SIOCGIFNAME(index
4): No such device
So the kobject is visible in udev before the device is ready.
The issue is reported here:
https://bugzilla.kernel.org/show_bug.cgi?id=15606
Fix this by postponing the uevent with device_add_noevent() and
calling device_uevent() once the device is really ready.
Thanks to Johannes Berg for the original idea.
Signed-off-by: Kalle Valo <kalle.valo@...eros.com>
---
net/core/dev.c | 3 +++
net/core/net-sysfs.c | 2 +-
2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 856b6ee..80cfa23 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5454,6 +5454,9 @@ int register_netdevice(struct net_device *dev)
rollback_registered(dev);
dev->reg_state = NETREG_UNREGISTERED;
}
+
+ device_uevent(&(dev->dev));
+
/*
* Prevent userspace races by waiting until the network
* device is fully setup before sending notifications.
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 5ceb257..c10b1d5 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -1337,7 +1337,7 @@ int netdev_register_kobject(struct net_device *net)
#endif
#endif /* CONFIG_SYSFS */
- error = device_add(dev);
+ error = device_add_noevent(dev);
if (error)
return error;
--
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