aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Galbraith <efault@gmx.de>2007-02-21 15:45:35 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2007-02-23 17:52:09 -0500
commit63ce18cfe685115ff8d341bae4c9204a79043cf0 (patch)
tree7f37a6f9f0453b2122e490d6ef68f213d8a878a3
parent40cf67c5fcc513406558c01b91129280208e57bf (diff)
driver core: refcounting fix
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 <efault@gmx.de> Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--kernel/module.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c
index 8c25b1a04fa6..1ecf08106381 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2425,6 +2425,12 @@ void module_remove_driver(struct device_driver *drv)
2425 kfree(driver_name); 2425 kfree(driver_name);
2426 } 2426 }
2427 } 2427 }
2428 /*
2429 * Undo the additional reference we added in module_add_driver()
2430 * via kset_find_obj()
2431 */
2432 if (drv->mod_name)
2433 kobject_put(&drv->kobj);
2428} 2434}
2429EXPORT_SYMBOL(module_remove_driver); 2435EXPORT_SYMBOL(module_remove_driver);
2430#endif 2436#endif