From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Alistair Strachan <astrachan@google.com>
Cc: linux-kernel@vger.kernel.org, syzbot <syzkaller@googlegroups.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernel.org, kernel-team@android.com
Subject: Re: [PATCH v2] media: uvcvideo: Fix 'type' check leading to overflow
Date: Wed, 19 Dec 2018 10:17:46 +0200 [thread overview]
Message-ID: <7327024.PA5BtzYvEC@avalon> (raw)
In-Reply-To: <20181219013248.94850-1-astrachan@google.com>
Hi Alistair,
Thank you for the patch.
On Wednesday, 19 December 2018 03:32:48 EET Alistair Strachan wrote:
> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Are you sure you don't want to keep authorship ? I've merely reviewed v1 and
proposed an alternative implementation :-) Let me know what you would prefer
and I'll apply this to my tree.
> When initially testing the Camera Terminal Descriptor wTerminalType
> field (buffer[4]), no mask is used. Later in the function, the MSB is
> overloaded to store the descriptor subtype, and so a mask of 0x7fff
> is used to check the type.
>
> If a descriptor is specially crafted to set this overloaded bit in the
> original wTerminalType field, the initial type check will fail (falling
> through, without adjusting the buffer size), but the later type checks
> will pass, assuming the buffer has been made suitably large, causing an
> overflow.
>
> Avoid this problem by checking for the MSB in the wTerminalType field.
> If the bit is set, assume the descriptor is bad, and abort parsing it.
>
> Originally reported here:
> https://groups.google.com/forum/#!topic/syzkaller/Ot1fOE6v1d8
> A similar (non-compiling) patch was provided at that time.
>
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Signed-off-by: Alistair Strachan <astrachan@google.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
> Cc: linux-media@vger.kernel.org
> Cc: kernel-team@android.com
> ---
> v2: Use an alternative fix suggested by Laurent
> drivers/media/usb/uvc/uvc_driver.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_driver.c
> b/drivers/media/usb/uvc/uvc_driver.c index bc369a0934a3..7fde3ce642c4
> 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -1065,11 +1065,19 @@ static int uvc_parse_standard_control(struct
> uvc_device *dev, return -EINVAL;
> }
>
> - /* Make sure the terminal type MSB is not null, otherwise it
> - * could be confused with a unit.
> + /*
> + * Reject invalid terminal types that would cause issues:
> + *
> + * - The high byte must be non-zero, otherwise it would be
> + * confused with a unit.
> + *
> + * - Bit 15 must be 0, as we use it internally as a terminal
> + * direction flag.
> + *
> + * Other unknown types are accepted.
> */
> type = get_unaligned_le16(&buffer[4]);
> - if ((type & 0xff00) == 0) {
> + if ((type & 0x7f00) == 0 || (type & 0x8000) != 0) {
> uvc_trace(UVC_TRACE_DESCR, "device %d videocontrol "
> "interface %d INPUT_TERMINAL %d has invalid "
> "type 0x%04x, skipping\n", udev->devnum,
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2018-12-19 8:17 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 1:32 [PATCH v2] media: uvcvideo: Fix 'type' check leading to overflow Alistair Strachan
2018-12-19 8:17 ` Laurent Pinchart [this message]
2018-12-19 15:13 ` Alistair Strachan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7327024.PA5BtzYvEC@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=astrachan@google.com \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=syzkaller@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.