media: usb: pwc-uncompress: Use struct_size() helper in pwc_decompress()
authorGustavo A. R. Silva <gustavoars@kernel.org>
Thu, 20 Jan 2022 21:24:34 +0000 (15:24 -0600)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 22 Feb 2022 08:41:11 +0000 (09:41 +0100)
Make use of the struct_size() helper instead of an open-coded version,
in order to avoid any potential type mistakes or integer overflows that,
in the worst scenario, could lead to heap overflows.

Also, address the following sparse warnings:
drivers/media/usb/pwc/pwc-uncompress.c:44:44: warning: using sizeof on a flexible structure

Link: https://github.com/KSPP/linux/issues/174
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/usb/pwc/pwc-uncompress.c

index 68bc382..faf44cd 100644 (file)
@@ -41,7 +41,7 @@ int pwc_decompress(struct pwc_device *pdev, struct pwc_frame_buf *fbuf)
                memcpy(raw_frame->cmd, pdev->cmd_buf, 4);
                memcpy(raw_frame+1, yuv, pdev->frame_size);
                vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0,
-                       pdev->frame_size + sizeof(struct pwc_raw_frame));
+                       struct_size(raw_frame, rawframe, pdev->frame_size));
                return 0;
        }