summaryrefslogtreecommitdiff
path: root/drivers/net/netconsole.c
diff options
context:
space:
mode:
authorNikolay Aleksandrov <nikolay@redhat.com>2013-09-19 15:02:36 +0200
committerDavid S. Miller <davem@davemloft.net>2013-09-19 14:15:53 -0400
commitc71380ff0b199f1e8be5ca46dd91262f7fbe4cb4 (patch)
tree4d753b6aa3cb50f68f15e85b02cc7f17a443c802 /drivers/net/netconsole.c
parentd0fe8c888b1fd1a2f84b9962cabcb98a70988aec (diff)
downloadlwn-c71380ff0b199f1e8be5ca46dd91262f7fbe4cb4.tar.gz
lwn-c71380ff0b199f1e8be5ca46dd91262f7fbe4cb4.zip
netconsole: fix a deadlock with rtnl and netconsole's mutex
This bug was introduced by commit 7a163bfb7ce50895bbe67300ea610d31b9c09230 ("netconsole: avoid a crash with multiple sysfs writers"). In store_enabled() we have the following sequence: acquire nt->mutex then rtnl, but in the netconsole netdev notifier we have rtnl then nt->mutex effectively leading to a deadlock. The NULL pointer dereference that the above commit tries to fix is actually due to another bug in netpoll_cleanup(). This is fixed by dropping the mutex from the netdev notifier as it's already protected by rtnl. Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netconsole.c')
-rw-r--r--drivers/net/netconsole.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index dcb21347c670..adeee615dd19 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -684,15 +684,12 @@ restart:
case NETDEV_RELEASE:
case NETDEV_JOIN:
case NETDEV_UNREGISTER:
- /*
- * rtnl_lock already held
+ /* rtnl_lock already held
* we might sleep in __netpoll_cleanup()
*/
spin_unlock_irqrestore(&target_list_lock, flags);
- mutex_lock(&nt->mutex);
__netpoll_cleanup(&nt->np);
- mutex_unlock(&nt->mutex);
spin_lock_irqsave(&target_list_lock, flags);
dev_put(nt->np.dev);