driver core: fix shutdown races with probe/remove(v3)
authorMing Lei <ming.lei@canonical.com>
Fri, 22 Jun 2012 10:01:40 +0000 (18:01 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Jul 2012 01:04:25 +0000 (18:04 -0700)
commitd1c6c030fcec6f860d9bb6c632a3ebe62e28440b
tree1a6bbf92f2da6f0df73efb6725de990bb63e4853
parent6fbfd0592ef88ba29cdce84ef92757351f1fa9c9
driver core: fix shutdown races with probe/remove(v3)

Firstly, .shutdown callback may touch a uninitialized hardware
if dev->driver is set and .probe is not completed.

Secondly, device_shutdown() may dereference a null pointer to cause
oops when dev->driver is cleared after it has been checked in
device_shutdown().

So just hold device lock and its parent lock(if it has) to
fix the races.

Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/core.c