mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 04:48:04 +09:00
uvcvideo: Fix uvc_fixup_video_ctrl() format search
commit 38a66824d9 upstream.
The scheme used to index format in uvc_fixup_video_ctrl() is not robust:
format index is based on descriptor ordering, which does not necessarily
match bFormatIndex ordering. Searching for first matching format will
prevent uvc_fixup_video_ctrl() from using the wrong format/frame to make
adjustments.
Signed-off-by: Stephan Lachowsky <stephan.lachowsky@maxim-ic.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
44331dfa4e
commit
aa47e59a08
@@ -64,15 +64,19 @@ int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
|
||||
static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
|
||||
struct uvc_streaming_control *ctrl)
|
||||
{
|
||||
struct uvc_format *format;
|
||||
struct uvc_format *format = NULL;
|
||||
struct uvc_frame *frame = NULL;
|
||||
unsigned int i;
|
||||
|
||||
if (ctrl->bFormatIndex <= 0 ||
|
||||
ctrl->bFormatIndex > stream->nformats)
|
||||
return;
|
||||
for (i = 0; i < stream->nformats; ++i) {
|
||||
if (stream->format[i].index == ctrl->bFormatIndex) {
|
||||
format = &stream->format[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
format = &stream->format[ctrl->bFormatIndex - 1];
|
||||
if (format == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < format->nframes; ++i) {
|
||||
if (format->frame[i].bFrameIndex == ctrl->bFrameIndex) {
|
||||
|
||||
Reference in New Issue
Block a user