From 46bb3a4d8490b318fbcfac7b69c217cec05d7a8f Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 8 Feb 2016 11:31:00 +0100 Subject: driver: Fix unregister device after device probe failure When a device probe fails the device is removed from the active list. If then the device is unregistered afterwards it is removed from the active list again resulting in a crash. To fix this initialize the devices active list entry when removing it from the active list. Signed-off-by: Sascha Hauer --- drivers/base/driver.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers') diff --git a/drivers/base/driver.c b/drivers/base/driver.c index a70fbb217a..c529296fc6 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -101,6 +101,8 @@ int device_probe(struct device_d *dev) } list_del(&dev->active); + INIT_LIST_HEAD(&dev->active); + dev_err(dev, "probe failed: %s\n", strerror(-ret)); return ret; @@ -258,6 +260,8 @@ static int device_probe_deferred(void) list_for_each_entry_safe(dev, tmp, &deferred, active) { list_del(&dev->active); + INIT_LIST_HEAD(&dev->active); + dev_dbg(dev, "re-probe device\n"); bus_for_each_driver(dev->bus, drv) { if (match(drv, dev)) -- cgit v1.2.3