瀏覽代碼

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>
Mike Galbraith 18 年之前
父節點
當前提交
63ce18cfe6
共有 1 個文件被更改,包括 6 次插入0 次删除
  1. 6 0
      kernel/module.c

+ 6 - 0
kernel/module.c

@@ -2425,6 +2425,12 @@ void module_remove_driver(struct device_driver *drv)
 			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