driver core: bus: Fix a potential double free
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Tue, 29 Aug 2017 19:23:49 +0000 (21:23 +0200)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 26 Nov 2017 13:51:06 +0000 (13:51 +0000)
commit 0f9b011d3321ca1079c7a46c18cb1956fbdb7bcb upstream.

The .release function of driver_ktype is 'driver_release()'.
This function frees the container_of this kobject.

So, this memory must not be freed explicitly in the error handling path of
'bus_add_driver()'. Otherwise a double free will occur.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/base/bus.c

index b802cfc..db41a4b 100644 (file)
@@ -684,7 +684,7 @@ int bus_add_driver(struct device_driver *drv)
 
 out_unregister:
        kobject_put(&priv->kobj);
-       kfree(drv->p);
+       /* drv->p is freed in driver_release()  */
        drv->p = NULL;
 out_put_bus:
        bus_put(bus);