Per kobject_init_and_add() kernel-doc, calling kfree() directly on
error bypasses reference counting and skips the kobject's release
callback, leaking the reference.

Use kobject_put() instead of kfree() on registration failure to fix
this.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reviewed-by: Sourabh Jain <[email protected]>
Signed-off-by: Tarun Sahu <[email protected]>
---
 drivers/firmware/edd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c
index f980c5b56858..763e7b16d517 100644
--- a/drivers/firmware/edd.c
+++ b/drivers/firmware/edd.c
@@ -748,7 +748,7 @@ edd_init(void)
 
                rc = edd_device_register(edev, i);
                if (rc) {
-                       kfree(edev);
+                       kobject_put(&edev->kobj);
                        goto out;
                }
                edd_devices[i] = edev;
-- 
2.55.0.979.g7e5102b832-goog


Reply via email to