From: Dan Carpenter <dan.carpen...@oracle.com>

commit c143a559b073aeea688b9bb7c5b46f3cf322d569 upstream.

In the current kernel, then kzalloc() can't fail for small allocations,
but if it did fail then we would have a NULL dereference in the error
handling.  Also in dlfb_usb_disconnect() if "info" were NULL then it
would cause an Oops inside the unregister_framebuffer() function but it
can't be NULL so let's remove that check.

Fixes: 68a958a915ca ("udlfb: handle unplug properly")
Signed-off-by: Dan Carpenter <dan.carpen...@oracle.com>
Cc: Bernie Thompson <ber...@plugable.com>
Cc: Mikulas Patocka <mpato...@redhat.com>
Cc: Alexey Khoroshilov <khoroshi...@ispras.ru>
Cc: Colin Ian King <colin.k...@canonical.com>
Cc: Wen Yang <wen.yan...@zte.com.cn>
[b.zolnierkie: added "Fixes:" tag]
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnier...@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/video/fbdev/udlfb.c |   14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

--- a/drivers/video/fbdev/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
@@ -1659,7 +1659,7 @@ static int dlfb_usb_probe(struct usb_int
        dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
        if (!dlfb) {
                dev_err(&intf->dev, "%s: failed to allocate dlfb\n", __func__);
-               goto error;
+               return -ENOMEM;
        }
 
        INIT_LIST_HEAD(&dlfb->deferred_free);
@@ -1769,7 +1769,7 @@ static int dlfb_usb_probe(struct usb_int
 error:
        if (dlfb->info) {
                dlfb_ops_destroy(dlfb->info);
-       } else if (dlfb) {
+       } else {
                usb_put_dev(dlfb->udev);
                kfree(dlfb);
        }
@@ -1796,12 +1796,10 @@ static void dlfb_usb_disconnect(struct u
        /* this function will wait for all in-flight urbs to complete */
        dlfb_free_urb_list(dlfb);
 
-       if (info) {
-               /* remove udlfb's sysfs interfaces */
-               for (i = 0; i < ARRAY_SIZE(fb_device_attrs); i++)
-                       device_remove_file(info->dev, &fb_device_attrs[i]);
-               device_remove_bin_file(info->dev, &edid_attr);
-       }
+       /* remove udlfb's sysfs interfaces */
+       for (i = 0; i < ARRAY_SIZE(fb_device_attrs); i++)
+               device_remove_file(info->dev, &fb_device_attrs[i]);
+       device_remove_bin_file(info->dev, &edid_attr);
 
        unregister_framebuffer(info);
 }


Reply via email to