mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
USB: ulpi: fix memory leak on registration failure
The allocated device name is never freed on early ULPI device
registration failures.
Fix this by initialising the device structure earlier and releasing the
initial reference whenever registration fails.
Fixes: 289fcff4bc ("usb: add bus type for USB ULPI")
Cc: stable <stable@kernel.org>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260608145803.69360-1-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2c00e09e3f
commit
8af6812795
@@ -281,28 +281,24 @@ static int ulpi_register(struct device *dev, struct ulpi *ulpi)
|
||||
ulpi->dev.parent = dev; /* needed early for ops */
|
||||
ulpi->dev.bus = &ulpi_bus;
|
||||
ulpi->dev.type = &ulpi_dev_type;
|
||||
|
||||
device_initialize(&ulpi->dev);
|
||||
|
||||
dev_set_name(&ulpi->dev, "%s.ulpi", dev_name(dev));
|
||||
|
||||
ACPI_COMPANION_SET(&ulpi->dev, ACPI_COMPANION(dev));
|
||||
|
||||
ret = ulpi_of_register(ulpi);
|
||||
if (ret) {
|
||||
kfree(ulpi);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ulpi_read_id(ulpi);
|
||||
if (ret) {
|
||||
of_node_put(ulpi->dev.of_node);
|
||||
kfree(ulpi);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = device_register(&ulpi->dev);
|
||||
if (ret) {
|
||||
put_device(&ulpi->dev);
|
||||
ret = device_add(&ulpi->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
root = debugfs_create_dir(dev_name(&ulpi->dev), ulpi_root);
|
||||
debugfs_create_file("regs", 0444, root, ulpi, &ulpi_regs_fops);
|
||||
@@ -334,9 +330,10 @@ struct ulpi *ulpi_register_interface(struct device *dev,
|
||||
ulpi->ops = ops;
|
||||
|
||||
ret = ulpi_register(dev, ulpi);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
put_device(&ulpi->dev);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
}
|
||||
|
||||
return ulpi;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user