mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
[media] uvcvideo: Fix uvc_fixup_video_ctrl() format search
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> Cc: stable@kernel.org Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
5db2c3ba4d
commit
38a66824d9
@ -89,15 +89,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) {
|
||||
|
Loading…
Reference in New Issue
Block a user