Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] uvcvideo: freeing an error pointer

A recent cleanup introduced a potential dereference of -EFAULT when we
call kfree(map->menu_info).

Fixes: 4cc5bed1caeb ("[media] uvcvideo: Use memdup_user() rather than duplicating its implementation")

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

authored by

Dan Carpenter and committed by
Mauro Carvalho Chehab
cf2113ca d3d83ee2

+4 -4
+4 -4
drivers/media/usb/uvc/uvc_v4l2.c
··· 66 66 if (xmap->menu_count == 0 || 67 67 xmap->menu_count > UVC_MAX_CONTROL_MENU_ENTRIES) { 68 68 ret = -EINVAL; 69 - goto done; 69 + goto free_map; 70 70 } 71 71 72 72 size = xmap->menu_count * sizeof(*map->menu_info); 73 73 map->menu_info = memdup_user(xmap->menu_info, size); 74 74 if (IS_ERR(map->menu_info)) { 75 75 ret = PTR_ERR(map->menu_info); 76 - goto done; 76 + goto free_map; 77 77 } 78 78 79 79 map->menu_count = xmap->menu_count; ··· 83 83 uvc_trace(UVC_TRACE_CONTROL, "Unsupported V4L2 control type " 84 84 "%u.\n", xmap->v4l2_type); 85 85 ret = -ENOTTY; 86 - goto done; 86 + goto free_map; 87 87 } 88 88 89 89 ret = uvc_ctrl_add_mapping(chain, map); 90 90 91 - done: 92 91 kfree(map->menu_info); 92 + free_map: 93 93 kfree(map); 94 94 95 95 return ret;