forked from Minki/linux
[media] v4l: uvcvideo: Fix buffer completion size check
Commite93e7fd9f5
("v4l2: uvcvideo: Allow using larger buffers") reworked the buffer size sanity check at buffer completion time to use the frame size instead of the allocated buffer size. However, it introduced two bugs in doing so: - it assigned the allocated buffer size to the frame_size field, instead of assigning the correct frame size - it performed the assignment in the S_FMT handler, resulting in the frame_size field being uninitialized if the userspace application doesn't call S_FMT. Fix both issues by removing the frame_size field and validating the buffer size against the UVC video control dwMaxFrameSize. Fixes:e93e7fd9f5
("v4l2: uvcvideo: Allow using larger buffers") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
c204e1fafb
commit
c601f53f8f
@ -318,7 +318,6 @@ static int uvc_v4l2_set_format(struct uvc_streaming *stream,
|
||||
stream->ctrl = probe;
|
||||
stream->cur_format = format;
|
||||
stream->cur_frame = frame;
|
||||
stream->frame_size = fmt->fmt.pix.sizeimage;
|
||||
|
||||
done:
|
||||
mutex_unlock(&stream->mutex);
|
||||
|
@ -1143,7 +1143,7 @@ static int uvc_video_encode_data(struct uvc_streaming *stream,
|
||||
static void uvc_video_validate_buffer(const struct uvc_streaming *stream,
|
||||
struct uvc_buffer *buf)
|
||||
{
|
||||
if (stream->frame_size != buf->bytesused &&
|
||||
if (stream->ctrl.dwMaxVideoFrameSize != buf->bytesused &&
|
||||
!(stream->cur_format->flags & UVC_FMT_FLAG_COMPRESSED))
|
||||
buf->error = 1;
|
||||
}
|
||||
|
@ -457,7 +457,6 @@ struct uvc_streaming {
|
||||
struct uvc_format *def_format;
|
||||
struct uvc_format *cur_format;
|
||||
struct uvc_frame *cur_frame;
|
||||
size_t frame_size;
|
||||
|
||||
/* Protect access to ctrl, cur_format, cur_frame and hardware video
|
||||
* probe control.
|
||||
|
Loading…
Reference in New Issue
Block a user