diff options
| author | Mike Galbraith <efault@gmx.de> | 2007-02-21 15:45:35 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-02-23 17:52:09 -0500 |
| commit | 63ce18cfe685115ff8d341bae4c9204a79043cf0 (patch) | |
| tree | 7f37a6f9f0453b2122e490d6ef68f213d8a878a3 | |
| parent | 40cf67c5fcc513406558c01b91129280208e57bf (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.c | 6 |
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 | } |
| 2429 | EXPORT_SYMBOL(module_remove_driver); | 2435 | EXPORT_SYMBOL(module_remove_driver); |
| 2430 | #endif | 2436 | #endif |
