udlfb: fix some inconsistent NULL checking
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>
This commit is contained in:
parent
94e1f96667
commit
b8304d918c
1 changed files with 6 additions and 8 deletions
|
@ -1659,7 +1659,7 @@ static int dlfb_usb_probe(struct usb_interface *intf,
|
|||
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_interface *intf,
|
|||
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 usb_interface *intf)
|
|||
/* 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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue