Commit e6d773f9 authored by Yang Yingliang's avatar Yang Yingliang Committed by Martin K. Petersen

scsi: scsi_debug: Fix possible name leak in sdebug_add_host_helper()

Afer commit 1fa5ae85 ("driver core: get rid of struct device's bus_id
string array"), the name of device is allocated dynamically, it needs be
freed when device_register() returns error.

As comment of device_register() says, one should use put_device() to give
up the reference in the error path. Fix this by calling put_device(), then
the name can be freed in kobject_cleanup(), and sdbg_host is freed in
sdebug_release_adapter().

When the device release is not set, it means the device is not initialized.
We can not call put_device() in this case. Use kfree() to free memory.

Fixes: 1fa5ae85 ("driver core: get rid of struct device's bus_id string array")
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20221112131010.3757845-1-yangyingliang@huawei.comSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 47b6a122
...@@ -7329,6 +7329,9 @@ static int sdebug_add_host_helper(int per_host_idx) ...@@ -7329,6 +7329,9 @@ static int sdebug_add_host_helper(int per_host_idx)
kfree(sdbg_devinfo->zstate); kfree(sdbg_devinfo->zstate);
kfree(sdbg_devinfo); kfree(sdbg_devinfo);
} }
if (sdbg_host->dev.release)
put_device(&sdbg_host->dev);
else
kfree(sdbg_host); kfree(sdbg_host);
pr_warn("%s: failed, errno=%d\n", __func__, -error); pr_warn("%s: failed, errno=%d\n", __func__, -error);
return error; return error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment