]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
usb: ulpi: fix memory leak on ulpi_register() error paths
authorFelix Gu <ustc.gu@gmail.com>
Tue, 7 Apr 2026 13:21:22 +0000 (21:21 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Apr 2026 15:49:43 +0000 (09:49 -0600)
Commit 01af542392b5 ("usb: ulpi: fix double free in
ulpi_register_interface() error path") removed kfree(ulpi) from
ulpi_register_interface() to fix a double-free when device_register()
fails.

But when ulpi_of_register() or ulpi_read_id() fail before
device_register() is called, the ulpi allocation is leaked.

Add kfree(ulpi) on both error paths to properly clean up the allocation.

Fixes: 01af542392b5 ("usb: ulpi: fix double free in ulpi_register_interface() error path")
Cc: stable <stable@kernel.org>
Signed-off-by: Felix Gu <ustc.gu@gmail.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://patch.msgid.link/20260407-ulpi-v1-1-f3fafe53f7b2@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/common/ulpi.c

index b34fb65813c45e0164b73c5f8c0afb4f5a9dff65..9b69148128e5bf8f1c0fb69633eb5f0d3d92d41f 100644 (file)
@@ -286,12 +286,15 @@ static int ulpi_register(struct device *dev, struct ulpi *ulpi)
        ACPI_COMPANION_SET(&ulpi->dev, ACPI_COMPANION(dev));
 
        ret = ulpi_of_register(ulpi);
-       if (ret)
+       if (ret) {
+               kfree(ulpi);
                return ret;
+       }
 
        ret = ulpi_read_id(ulpi);
        if (ret) {
                of_node_put(ulpi->dev.of_node);
+               kfree(ulpi);
                return ret;
        }