]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
usb: ulpi: fix double free in ulpi_register_interface() error path
authorGuangshuo Li <lgs201920130244@gmail.com>
Wed, 1 Apr 2026 02:51:42 +0000 (10:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Apr 2026 07:36:56 +0000 (09:36 +0200)
When device_register() fails, ulpi_register() calls put_device() on
ulpi->dev.

The device release callback ulpi_dev_release() drops the OF node
reference and frees ulpi, but the current error path in
ulpi_register_interface() then calls kfree(ulpi) again, causing a
double free.

Let put_device() handle the cleanup through ulpi_dev_release() and
avoid freeing ulpi again in ulpi_register_interface().

Fixes: 289fcff4bcdb1 ("usb: add bus type for USB ULPI")
Cc: stable <stable@kernel.org>
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://patch.msgid.link/20260401025142.1398996-1-lgs201920130244@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/common/ulpi.c

index 56c9bfaf2ea37ea73ad5a1de354bc6346feff9a4..b34fb65813c45e0164b73c5f8c0afb4f5a9dff65 100644 (file)
@@ -331,10 +331,9 @@ struct ulpi *ulpi_register_interface(struct device *dev,
        ulpi->ops = ops;
 
        ret = ulpi_register(dev, ulpi);
-       if (ret) {
-               kfree(ulpi);
+       if (ret)
                return ERR_PTR(ret);
-       }
+
 
        return ulpi;
 }