From: Dan Carpenter dan.carpenter@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.carpenter@oracle.com Cc: Bernie Thompson bernie@plugable.com Cc: Mikulas Patocka mpatocka@redhat.com Cc: Alexey Khoroshilov khoroshilov@ispras.ru Cc: Colin Ian King colin.king@canonical.com Cc: Wen Yang wen.yang99@zte.com.cn [b.zolnierkie: added "Fixes:" tag] Signed-off-by: Bartlomiej Zolnierkiewicz b.zolnierkie@samsung.com Signed-off-by: Greg Kroah-Hartman gregkh@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); }