firmware: sysfb: fix platform-device leak in error path
authorJohan Hovold <johan@kernel.org>
Thu, 3 Mar 2022 18:05:19 +0000 (19:05 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:22:51 +0000 (14:22 +0200)
commit 202c08914ba50dd324e42d5ad99535a89f242560 upstream.

Make sure to free the platform device also in the unlikely event that
registration fails.

Fixes: 0589e8889dce ("drivers/firmware: Add missing platform_device_put() in sysfb_create_simplefb")
Fixes: 8633ef82f101 ("drivers/firmware: consolidate EFI framebuffer setup for all arches")
Cc: stable@vger.kernel.org # 5.14
Cc: Miaoqian Lin <linmq006@gmail.com>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20220303180519.3117-1-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/firmware/sysfb_simplefb.c

index 303a491..757cc8b 100644 (file)
@@ -113,16 +113,21 @@ __init int sysfb_create_simplefb(const struct screen_info *si,
        sysfb_apply_efi_quirks(pd);
 
        ret = platform_device_add_resources(pd, &res, 1);
-       if (ret) {
-               platform_device_put(pd);
-               return ret;
-       }
+       if (ret)
+               goto err_put_device;
 
        ret = platform_device_add_data(pd, mode, sizeof(*mode));
-       if (ret) {
-               platform_device_put(pd);
-               return ret;
-       }
+       if (ret)
+               goto err_put_device;
+
+       ret = platform_device_add(pd);
+       if (ret)
+               goto err_put_device;
+
+       return 0;
+
+err_put_device:
+       platform_device_put(pd);
 
-       return platform_device_add(pd);
+       return ret;
 }