driver-core: do not register a driver with bus_type not registered
If the bus_type is not registerd, driver_register to that bus will cause oops. I found this bug when test built-in usb serial drivers (ie. aircable driver) with 'nousb' cmdline params. In this patch: 1. set the bus->p=NULL when bus_register failed and unregisterd. 2. if bus->p is NULL, driver_register BUG_ON will be triggered. Signed-off-by: Dave Young <hidave.darkstar@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
e5779a583d
commit
f48f3febb2
|
@ -932,6 +932,7 @@ bus_uevent_fail:
|
|||
kset_unregister(&bus->p->subsys);
|
||||
kfree(bus->p);
|
||||
out:
|
||||
bus->p = NULL;
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bus_register);
|
||||
|
@ -953,6 +954,7 @@ void bus_unregister(struct bus_type *bus)
|
|||
bus_remove_file(bus, &bus_attr_uevent);
|
||||
kset_unregister(&bus->p->subsys);
|
||||
kfree(bus->p);
|
||||
bus->p = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bus_unregister);
|
||||
|
||||
|
|
|
@ -216,6 +216,8 @@ int driver_register(struct device_driver *drv)
|
|||
int ret;
|
||||
struct device_driver *other;
|
||||
|
||||
BUG_ON(!drv->bus->p);
|
||||
|
||||
if ((drv->bus->probe && drv->probe) ||
|
||||
(drv->bus->remove && drv->remove) ||
|
||||
(drv->bus->shutdown && drv->shutdown))
|
||||
|
|
Loading…
Reference in New Issue