* [PATCH v2] media: uvcvideo: Don't expose unsupported formats to userspace
@ 2023-05-06 6:58 Laurent Pinchart
2023-05-15 11:58 ` Ricardo Ribalda
0 siblings, 1 reply; 2+ messages in thread
From: Laurent Pinchart @ 2023-05-06 6:58 UTC (permalink / raw)
To: linux-media; +Cc: Kieran Bingham, Hans Verkuil, Ricardo Ribalda
When the uvcvideo driver encounters a format descriptor with an unknown
format GUID, it creates a corresponding struct uvc_format instance with
the fcc field set to 0. Since commit 50459f103edf ("media: uvcvideo:
Remove format descriptions"), the driver relies on the V4L2 core to
provide the format description string, which the V4L2 core can't do
without a valid 4CC. This triggers a WARN_ON.
As a format with a zero 4CC can't be selected, it is unusable for
applications. Ignore the format completely without creating a uvc_format
instance, which fixes the warning.
Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes since v1:
- Fix streaming->nformats
---
drivers/media/usb/uvc/uvc_driver.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index 4be6dfeaa295..8a9cfd5a0077 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -251,14 +251,17 @@ static int uvc_parse_format(struct uvc_device *dev,
/* Find the format descriptor from its GUID. */
fmtdesc = uvc_format_by_guid(&buffer[5]);
- if (fmtdesc != NULL) {
- format->fcc = fmtdesc->fcc;
- } else {
+ if (!fmtdesc) {
+ /*
+ * Unknown video formats are not fatal errors, the
+ * caller will skip this descriptor.
+ */
dev_info(&streaming->intf->dev,
"Unknown video format %pUl\n", &buffer[5]);
- format->fcc = 0;
+ return 0;
}
+ format->fcc = fmtdesc->fcc;
format->bpp = buffer[21];
/*
@@ -675,7 +678,7 @@ static int uvc_parse_streaming(struct uvc_device *dev,
interval = (u32 *)&frame[nframes];
streaming->format = format;
- streaming->nformats = nformats;
+ streaming->nformats = 0;
/* Parse the format descriptors. */
while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE) {
@@ -689,7 +692,10 @@ static int uvc_parse_streaming(struct uvc_device *dev,
&interval, buffer, buflen);
if (ret < 0)
goto error;
+ if (!ret)
+ break;
+ streaming->nformats++;
frame += format->nframes;
format++;
base-commit: 423f331364bfbcd1212b78ac9052894ff5213ac9
--
Regards,
Laurent Pinchart
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] media: uvcvideo: Don't expose unsupported formats to userspace
2023-05-06 6:58 [PATCH v2] media: uvcvideo: Don't expose unsupported formats to userspace Laurent Pinchart
@ 2023-05-15 11:58 ` Ricardo Ribalda
0 siblings, 0 replies; 2+ messages in thread
From: Ricardo Ribalda @ 2023-05-15 11:58 UTC (permalink / raw)
To: Laurent Pinchart; +Cc: linux-media, Kieran Bingham, Hans Verkuil
On Sat, 6 May 2023 at 08:58, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> When the uvcvideo driver encounters a format descriptor with an unknown
> format GUID, it creates a corresponding struct uvc_format instance with
> the fcc field set to 0. Since commit 50459f103edf ("media: uvcvideo:
> Remove format descriptions"), the driver relies on the V4L2 core to
> provide the format description string, which the V4L2 core can't do
> without a valid 4CC. This triggers a WARN_ON.
>
> As a format with a zero 4CC can't be selected, it is unusable for
> applications. Ignore the format completely without creating a uvc_format
> instance, which fixes the warning.
>
> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
> Changes since v1:
>
> - Fix streaming->nformats
> ---
> drivers/media/usb/uvc/uvc_driver.c | 16 +++++++++++-----
> 1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> index 4be6dfeaa295..8a9cfd5a0077 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -251,14 +251,17 @@ static int uvc_parse_format(struct uvc_device *dev,
> /* Find the format descriptor from its GUID. */
> fmtdesc = uvc_format_by_guid(&buffer[5]);
>
> - if (fmtdesc != NULL) {
> - format->fcc = fmtdesc->fcc;
> - } else {
> + if (!fmtdesc) {
> + /*
> + * Unknown video formats are not fatal errors, the
> + * caller will skip this descriptor.
> + */
> dev_info(&streaming->intf->dev,
> "Unknown video format %pUl\n", &buffer[5]);
> - format->fcc = 0;
> + return 0;
> }
>
> + format->fcc = fmtdesc->fcc;
> format->bpp = buffer[21];
>
> /*
> @@ -675,7 +678,7 @@ static int uvc_parse_streaming(struct uvc_device *dev,
> interval = (u32 *)&frame[nframes];
>
> streaming->format = format;
> - streaming->nformats = nformats;
> + streaming->nformats = 0;
>
> /* Parse the format descriptors. */
> while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE) {
> @@ -689,7 +692,10 @@ static int uvc_parse_streaming(struct uvc_device *dev,
> &interval, buffer, buflen);
> if (ret < 0)
> goto error;
> + if (!ret)
> + break;
>
> + streaming->nformats++;
> frame += format->nframes;
> format++;
>
>
> base-commit: 423f331364bfbcd1212b78ac9052894ff5213ac9
> --
> Regards,
>
> Laurent Pinchart
>
--
Ricardo Ribalda
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-05-15 12:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-06 6:58 [PATCH v2] media: uvcvideo: Don't expose unsupported formats to userspace Laurent Pinchart
2023-05-15 11:58 ` Ricardo Ribalda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).