mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
drivers: dio: fix possible memory leak in dio_init()
If device_register() returns error, the 'dev' and name needs be freed. Add a release function, and then call put_device() in the error path, so the name is freed in kobject_cleanup() and to the 'dev' is freed in release function. Fixes:2e4c77bea3
("m68k: dio - Kill warn_unused_result warnings") Fixes:1fa5ae857b
("driver core: get rid of struct device's bus_id string array") Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Link: https://lore.kernel.org/r/20221109064036.1835346-1-yangyingliang@huawei.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
30a0b95b13
commit
e63e99397b
@ -109,6 +109,12 @@ static char dio_no_name[] = { 0 };
|
||||
|
||||
#endif /* CONFIG_DIO_CONSTANTS */
|
||||
|
||||
static void dio_dev_release(struct device *dev)
|
||||
{
|
||||
struct dio_dev *ddev = container_of(dev, typeof(struct dio_dev), dev);
|
||||
kfree(ddev);
|
||||
}
|
||||
|
||||
int __init dio_find(int deviceid)
|
||||
{
|
||||
/* Called to find a DIO device before the full bus scan has run.
|
||||
@ -225,6 +231,7 @@ static int __init dio_init(void)
|
||||
dev->bus = &dio_bus;
|
||||
dev->dev.parent = &dio_bus.dev;
|
||||
dev->dev.bus = &dio_bus_type;
|
||||
dev->dev.release = dio_dev_release;
|
||||
dev->scode = scode;
|
||||
dev->resource.start = pa;
|
||||
dev->resource.end = pa + DIO_SIZE(scode, va);
|
||||
@ -252,6 +259,7 @@ static int __init dio_init(void)
|
||||
if (error) {
|
||||
pr_err("DIO: Error registering device %s\n",
|
||||
dev->name);
|
||||
put_device(&dev->dev);
|
||||
continue;
|
||||
}
|
||||
error = dio_create_sysfs_dev_files(dev);
|
||||
|
Loading…
Reference in New Issue
Block a user