From akpm@linux-foundation.org Wed Feb 21 12:45:48 2007 Date: Wed, 21 Feb 2007 12:45:35 -0800 From: Mike Galbraith Subject: driver core: refcounting fix To: mm-commits@vger.kernel.org Cc: efault@gmx.de, greg@kroah.com Message-ID: <200702212045.l1LKjZCs025361@shell0.pdx.osdl.net> From: Mike Galbraith Fix a reference counting bug exposed by commit 725522b5453dd680412f2b6463a988e4fd148757. If driver.mod_name exists, we take a reference in module_add_driver(), and never release it. Undo that reference in module_remove_driver(). Signed-off-by: Mike Galbraith Cc: Kay Sievers Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman --- kernel/module.c | 6 ++++++ 1 file changed, 6 insertions(+) --- gregkh-2.6.orig/kernel/module.c +++ gregkh-2.6/kernel/module.c @@ -2425,6 +2425,12 @@ void module_remove_driver(struct device_ kfree(driver_name); } } + /* + * Undo the additional reference we added in module_add_driver() + * via kset_find_obj() + */ + if (drv->mod_name) + kobject_put(&drv->kobj); } EXPORT_SYMBOL(module_remove_driver); #endif