USB: ulpi: fix memory leak on registration failure
Subsystems (3)
PATCH 1/1 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 289fcff4bcdb ("usb: add bus type for USB ULPI")
Cc [email protected] # 4.2
Cc Heikki Krogerus <[email protected]>
Signed-off-by Johan Hovold <[email protected]>
--- drivers/usb/common/ulpi.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-)
drivers/usb/common/ulpi.c +10 -13
@@ -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; }
Signature · 1 line
2.53.0