|
@@ -58,6 +58,15 @@ static int uvc_ioctl_ctrl_map(struct uvc_video_chain *chain,
|
|
|
break;
|
|
|
|
|
|
case V4L2_CTRL_TYPE_MENU:
|
|
|
+ /* Prevent excessive memory consumption, as well as integer
|
|
|
+ * overflows.
|
|
|
+ */
|
|
|
+ if (xmap->menu_count == 0 ||
|
|
|
+ xmap->menu_count > UVC_MAX_CONTROL_MENU_ENTRIES) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto done;
|
|
|
+ }
|
|
|
+
|
|
|
size = xmap->menu_count * sizeof(*map->menu_info);
|
|
|
map->menu_info = kmalloc(size, GFP_KERNEL);
|
|
|
if (map->menu_info == NULL) {
|