2022-09-20 14:22:39

by Ricardo Ribalda

[permalink] [raw]
Subject: [PATCH v1 0/1] [RESEND] uvc: Handle cames with invalid descriptors

Just a resend of the patch.

To: Laurent Pinchart <[email protected]>
To: Mauro Carvalho Chehab <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Ricardo Ribalda <[email protected]>

---
Ricardo Ribalda (1):
media: uvc: Handle cameras with invalid descriptors

drivers/media/usb/uvc/uvc_entity.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
---
base-commit: 521a547ced6477c54b4b0cc206000406c221b4d6
change-id: 20220920-invalid-desc-80bcc8082ce3

Best regards,
--
Ricardo Ribalda <[email protected]>


2022-09-20 14:29:12

by Ricardo Ribalda

[permalink] [raw]
Subject: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

If the source entity does not contain any pads, do not create a link.

Reported-by: syzbot <[email protected]>
Signed-off-by: Ricardo Ribalda <[email protected]>

diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
index 7c4d2f93d351..1f730cb72e58 100644
--- a/drivers/media/usb/uvc/uvc_entity.c
+++ b/drivers/media/usb/uvc/uvc_entity.c
@@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
? (remote->vdev ? &remote->vdev->entity : NULL)
: &remote->subdev.entity;
- if (source == NULL)
+ if (source == NULL || source->num_pads == 0)
continue;

remote_pad = remote->num_pads - 1;

--
b4 0.11.0-dev-d93f8

2022-09-21 01:09:51

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Hi Ricardo,

Thank you for the patch.

On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> If the source entity does not contain any pads, do not create a link.
>
> Reported-by: syzbot <[email protected]>
> Signed-off-by: Ricardo Ribalda <[email protected]>
>
> diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> index 7c4d2f93d351..1f730cb72e58 100644
> --- a/drivers/media/usb/uvc/uvc_entity.c
> +++ b/drivers/media/usb/uvc/uvc_entity.c
> @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> ? (remote->vdev ? &remote->vdev->entity : NULL)
> : &remote->subdev.entity;
> - if (source == NULL)
> + if (source == NULL || source->num_pads == 0)

source->num_pads and remote->num_pads should always be identical, but as
the next line uses remote->num_pads, wouldn't it be better to test that
variable ? If so, I'd move the test a file lines earlier, with the
remote == NULL test.

What do you think ? If you agree I can make that change when applying,
there's no need for a new version. Otherwise I'll keep the patch as-is.

> continue;
>
> remote_pad = remote->num_pads - 1;
>

--
Regards,

Laurent Pinchart

2022-09-21 08:09:42

by Ricardo Ribalda

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Do you mean something like this?

diff --git a/drivers/media/usb/uvc/uvc_entity.c
b/drivers/media/usb/uvc/uvc_entity.c
index 7c4d2f93d351..66d1f5da4ec7 100644
--- a/drivers/media/usb/uvc/uvc_entity.c
+++ b/drivers/media/usb/uvc/uvc_entity.c
@@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
continue;

remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
- if (remote == NULL)
+ if (remote == NULL || remote->num_pads == 0)
return -EINVAL;

source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
@@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
if (source == NULL)
continue;

+ if (source->num_pads != remote->num_pads)
+ return -EINVAL;
+
remote_pad = remote->num_pads - 1;
ret = media_create_pad_link(source, remote_pad,
sink, i, flags);

regarding making a new patch, whatever is easier for you ;)


On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart
<[email protected]> wrote:
>
> Hi Ricardo,
>
> Thank you for the patch.
>
> On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > If the source entity does not contain any pads, do not create a link.
> >
> > Reported-by: syzbot <[email protected]>
> > Signed-off-by: Ricardo Ribalda <[email protected]>
> >
> > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > index 7c4d2f93d351..1f730cb72e58 100644
> > --- a/drivers/media/usb/uvc/uvc_entity.c
> > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > : &remote->subdev.entity;
> > - if (source == NULL)
> > + if (source == NULL || source->num_pads == 0)
>
> source->num_pads and remote->num_pads should always be identical, but as
> the next line uses remote->num_pads, wouldn't it be better to test that
> variable ? If so, I'd move the test a file lines earlier, with the
> remote == NULL test.
>
> What do you think ? If you agree I can make that change when applying,
> there's no need for a new version. Otherwise I'll keep the patch as-is.
>
> > continue;
> >
> > remote_pad = remote->num_pads - 1;
> >
>
> --
> Regards,
>
> Laurent Pinchart



--
Ricardo Ribalda

2022-09-21 21:55:18

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Hi Ricardo,

On Wed, Sep 21, 2022 at 09:51:44AM +0200, Ricardo Ribalda wrote:
> Do you mean something like this?
>
> diff --git a/drivers/media/usb/uvc/uvc_entity.c
> b/drivers/media/usb/uvc/uvc_entity.c
> index 7c4d2f93d351..66d1f5da4ec7 100644
> --- a/drivers/media/usb/uvc/uvc_entity.c
> +++ b/drivers/media/usb/uvc/uvc_entity.c
> @@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> continue;
>
> remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
> - if (remote == NULL)
> + if (remote == NULL || remote->num_pads == 0)
> return -EINVAL;

Yes.

>
> source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> @@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> if (source == NULL)
> continue;
>
> + if (source->num_pads != remote->num_pads)
> + return -EINVAL;
> +

But this I would have dropped, as the media_entity num_pads is
initialized from uvc_entity num_pads and neither are changed after.

> remote_pad = remote->num_pads - 1;
> ret = media_create_pad_link(source, remote_pad,
> sink, i, flags);
>
> regarding making a new patch, whatever is easier for you ;)
>
>
> On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart wrote:
> >
> > Hi Ricardo,
> >
> > Thank you for the patch.
> >
> > On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > > If the source entity does not contain any pads, do not create a link.
> > >
> > > Reported-by: syzbot <[email protected]>
> > > Signed-off-by: Ricardo Ribalda <[email protected]>
> > >
> > > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > > index 7c4d2f93d351..1f730cb72e58 100644
> > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > > : &remote->subdev.entity;
> > > - if (source == NULL)
> > > + if (source == NULL || source->num_pads == 0)
> >
> > source->num_pads and remote->num_pads should always be identical, but as
> > the next line uses remote->num_pads, wouldn't it be better to test that
> > variable ? If so, I'd move the test a file lines earlier, with the
> > remote == NULL test.
> >
> > What do you think ? If you agree I can make that change when applying,
> > there's no need for a new version. Otherwise I'll keep the patch as-is.
> >
> > > continue;
> > >
> > > remote_pad = remote->num_pads - 1;
> > >

--
Regards,

Laurent Pinchart

2022-09-21 22:43:27

by Ricardo Ribalda

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Hi Laurent

On Wed, 21 Sept 2022 at 23:16, Laurent Pinchart
<[email protected]> wrote:
>
> Hi Ricardo,
>
> On Wed, Sep 21, 2022 at 09:51:44AM +0200, Ricardo Ribalda wrote:
> > Do you mean something like this?
> >
> > diff --git a/drivers/media/usb/uvc/uvc_entity.c
> > b/drivers/media/usb/uvc/uvc_entity.c
> > index 7c4d2f93d351..66d1f5da4ec7 100644
> > --- a/drivers/media/usb/uvc/uvc_entity.c
> > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > @@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > continue;
> >
> > remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
> > - if (remote == NULL)
> > + if (remote == NULL || remote->num_pads == 0)
> > return -EINVAL;
>
> Yes.
>
> >
> > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > @@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > if (source == NULL)
> > continue;
> >
> > + if (source->num_pads != remote->num_pads)
> > + return -EINVAL;
> > +
>
> But this I would have dropped, as the media_entity num_pads is
> initialized from uvc_entity num_pads and neither are changed after.

Works for me. Shall I send a v2 or you can take it?

Thanks!
>
> > remote_pad = remote->num_pads - 1;
> > ret = media_create_pad_link(source, remote_pad,
> > sink, i, flags);
> >
> > regarding making a new patch, whatever is easier for you ;)
> >
> >
> > On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart wrote:
> > >
> > > Hi Ricardo,
> > >
> > > Thank you for the patch.
> > >
> > > On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > > > If the source entity does not contain any pads, do not create a link.
> > > >
> > > > Reported-by: syzbot <[email protected]>
> > > > Signed-off-by: Ricardo Ribalda <[email protected]>
> > > >
> > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > > > index 7c4d2f93d351..1f730cb72e58 100644
> > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > > > : &remote->subdev.entity;
> > > > - if (source == NULL)
> > > > + if (source == NULL || source->num_pads == 0)
> > >
> > > source->num_pads and remote->num_pads should always be identical, but as
> > > the next line uses remote->num_pads, wouldn't it be better to test that
> > > variable ? If so, I'd move the test a file lines earlier, with the
> > > remote == NULL test.
> > >
> > > What do you think ? If you agree I can make that change when applying,
> > > there's no need for a new version. Otherwise I'll keep the patch as-is.
> > >
> > > > continue;
> > > >
> > > > remote_pad = remote->num_pads - 1;
> > > >
>
> --
> Regards,
>
> Laurent Pinchart



--
Ricardo Ribalda

2022-10-24 20:31:36

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Hi Ricardo,

On Wed, Sep 21, 2022 at 11:52:29PM +0200, Ricardo Ribalda wrote:
> On Wed, 21 Sept 2022 at 23:16, Laurent Pinchart wrote:
> > On Wed, Sep 21, 2022 at 09:51:44AM +0200, Ricardo Ribalda wrote:
> > > Do you mean something like this?
> > >
> > > diff --git a/drivers/media/usb/uvc/uvc_entity.c
> > > b/drivers/media/usb/uvc/uvc_entity.c
> > > index 7c4d2f93d351..66d1f5da4ec7 100644
> > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > @@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > continue;
> > >
> > > remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
> > > - if (remote == NULL)
> > > + if (remote == NULL || remote->num_pads == 0)
> > > return -EINVAL;
> >
> > Yes.
> >
> > >
> > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > @@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > if (source == NULL)
> > > continue;
> > >
> > > + if (source->num_pads != remote->num_pads)
> > > + return -EINVAL;
> > > +
> >
> > But this I would have dropped, as the media_entity num_pads is
> > initialized from uvc_entity num_pads and neither are changed after.
>
> Works for me. Shall I send a v2 or you can take it?

I'm handling it locally, will be in the next pull request.

> > > remote_pad = remote->num_pads - 1;
> > > ret = media_create_pad_link(source, remote_pad,
> > > sink, i, flags);
> > >
> > > regarding making a new patch, whatever is easier for you ;)
> > >
> > >
> > > On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart wrote:
> > > >
> > > > Hi Ricardo,
> > > >
> > > > Thank you for the patch.
> > > >
> > > > On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > > > > If the source entity does not contain any pads, do not create a link.
> > > > >
> > > > > Reported-by: syzbot <[email protected]>
> > > > > Signed-off-by: Ricardo Ribalda <[email protected]>
> > > > >
> > > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > > > > index 7c4d2f93d351..1f730cb72e58 100644
> > > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > > > > : &remote->subdev.entity;
> > > > > - if (source == NULL)
> > > > > + if (source == NULL || source->num_pads == 0)
> > > >
> > > > source->num_pads and remote->num_pads should always be identical, but as
> > > > the next line uses remote->num_pads, wouldn't it be better to test that
> > > > variable ? If so, I'd move the test a file lines earlier, with the
> > > > remote == NULL test.
> > > >
> > > > What do you think ? If you agree I can make that change when applying,
> > > > there's no need for a new version. Otherwise I'll keep the patch as-is.
> > > >
> > > > > continue;
> > > > >
> > > > > remote_pad = remote->num_pads - 1;

--
Regards,

Laurent Pinchart

2023-01-03 15:04:56

by Ricardo Ribalda

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

Hi Laurent

I think we have missed this patch.

Regards!

On Mon, 24 Oct 2022 at 20:19, Laurent Pinchart
<[email protected]> wrote:
>
> Hi Ricardo,
>
> On Wed, Sep 21, 2022 at 11:52:29PM +0200, Ricardo Ribalda wrote:
> > On Wed, 21 Sept 2022 at 23:16, Laurent Pinchart wrote:
> > > On Wed, Sep 21, 2022 at 09:51:44AM +0200, Ricardo Ribalda wrote:
> > > > Do you mean something like this?
> > > >
> > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c
> > > > b/drivers/media/usb/uvc/uvc_entity.c
> > > > index 7c4d2f93d351..66d1f5da4ec7 100644
> > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > @@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > continue;
> > > >
> > > > remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
> > > > - if (remote == NULL)
> > > > + if (remote == NULL || remote->num_pads == 0)
> > > > return -EINVAL;
> > >
> > > Yes.
> > >
> > > >
> > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > @@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > if (source == NULL)
> > > > continue;
> > > >
> > > > + if (source->num_pads != remote->num_pads)
> > > > + return -EINVAL;
> > > > +
> > >
> > > But this I would have dropped, as the media_entity num_pads is
> > > initialized from uvc_entity num_pads and neither are changed after.
> >
> > Works for me. Shall I send a v2 or you can take it?
>
> I'm handling it locally, will be in the next pull request.
>
> > > > remote_pad = remote->num_pads - 1;
> > > > ret = media_create_pad_link(source, remote_pad,
> > > > sink, i, flags);
> > > >
> > > > regarding making a new patch, whatever is easier for you ;)
> > > >
> > > >
> > > > On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart wrote:
> > > > >
> > > > > Hi Ricardo,
> > > > >
> > > > > Thank you for the patch.
> > > > >
> > > > > On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > > > > > If the source entity does not contain any pads, do not create a link.
> > > > > >
> > > > > > Reported-by: syzbot <[email protected]>
> > > > > > Signed-off-by: Ricardo Ribalda <[email protected]>
> > > > > >
> > > > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > > > > > index 7c4d2f93d351..1f730cb72e58 100644
> > > > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > > > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > > > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > > > > > : &remote->subdev.entity;
> > > > > > - if (source == NULL)
> > > > > > + if (source == NULL || source->num_pads == 0)
> > > > >
> > > > > source->num_pads and remote->num_pads should always be identical, but as
> > > > > the next line uses remote->num_pads, wouldn't it be better to test that
> > > > > variable ? If so, I'd move the test a file lines earlier, with the
> > > > > remote == NULL test.
> > > > >
> > > > > What do you think ? If you agree I can make that change when applying,
> > > > > there's no need for a new version. Otherwise I'll keep the patch as-is.
> > > > >
> > > > > > continue;
> > > > > >
> > > > > > remote_pad = remote->num_pads - 1;
>
> --
> Regards,
>
> Laurent Pinchart



--
Ricardo Ribalda

2023-01-03 22:06:19

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] media: uvc: Handle cameras with invalid descriptors

On Tue, Jan 03, 2023 at 03:55:54PM +0100, Ricardo Ribalda wrote:
> Hi Laurent
>
> I think we have missed this patch.

Pushed to
https://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git/log/?h=next/uvc,
I'll send a pull request next week when Mauro comes back from vacation.

> On Mon, 24 Oct 2022 at 20:19, Laurent Pinchart wrote:
> > On Wed, Sep 21, 2022 at 11:52:29PM +0200, Ricardo Ribalda wrote:
> > > On Wed, 21 Sept 2022 at 23:16, Laurent Pinchart wrote:
> > > > On Wed, Sep 21, 2022 at 09:51:44AM +0200, Ricardo Ribalda wrote:
> > > > > Do you mean something like this?
> > > > >
> > > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c
> > > > > b/drivers/media/usb/uvc/uvc_entity.c
> > > > > index 7c4d2f93d351..66d1f5da4ec7 100644
> > > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > > @@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > > continue;
> > > > >
> > > > > remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
> > > > > - if (remote == NULL)
> > > > > + if (remote == NULL || remote->num_pads == 0)
> > > > > return -EINVAL;
> > > >
> > > > Yes.
> > > >
> > > > >
> > > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > > @@ -46,6 +46,9 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > > if (source == NULL)
> > > > > continue;
> > > > >
> > > > > + if (source->num_pads != remote->num_pads)
> > > > > + return -EINVAL;
> > > > > +
> > > >
> > > > But this I would have dropped, as the media_entity num_pads is
> > > > initialized from uvc_entity num_pads and neither are changed after.
> > >
> > > Works for me. Shall I send a v2 or you can take it?
> >
> > I'm handling it locally, will be in the next pull request.
> >
> > > > > remote_pad = remote->num_pads - 1;
> > > > > ret = media_create_pad_link(source, remote_pad,
> > > > > sink, i, flags);
> > > > >
> > > > > regarding making a new patch, whatever is easier for you ;)
> > > > >
> > > > >
> > > > > On Wed, 21 Sept 2022 at 02:53, Laurent Pinchart wrote:
> > > > > >
> > > > > > Hi Ricardo,
> > > > > >
> > > > > > Thank you for the patch.
> > > > > >
> > > > > > On Tue, Sep 20, 2022 at 04:04:55PM +0200, Ricardo Ribalda wrote:
> > > > > > > If the source entity does not contain any pads, do not create a link.
> > > > > > >
> > > > > > > Reported-by: syzbot <[email protected]>
> > > > > > > Signed-off-by: Ricardo Ribalda <[email protected]>
> > > > > > >
> > > > > > > diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> > > > > > > index 7c4d2f93d351..1f730cb72e58 100644
> > > > > > > --- a/drivers/media/usb/uvc/uvc_entity.c
> > > > > > > +++ b/drivers/media/usb/uvc/uvc_entity.c
> > > > > > > @@ -43,7 +43,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,
> > > > > > > source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
> > > > > > > ? (remote->vdev ? &remote->vdev->entity : NULL)
> > > > > > > : &remote->subdev.entity;
> > > > > > > - if (source == NULL)
> > > > > > > + if (source == NULL || source->num_pads == 0)
> > > > > >
> > > > > > source->num_pads and remote->num_pads should always be identical, but as
> > > > > > the next line uses remote->num_pads, wouldn't it be better to test that
> > > > > > variable ? If so, I'd move the test a file lines earlier, with the
> > > > > > remote == NULL test.
> > > > > >
> > > > > > What do you think ? If you agree I can make that change when applying,
> > > > > > there's no need for a new version. Otherwise I'll keep the patch as-is.
> > > > > >
> > > > > > > continue;
> > > > > > >
> > > > > > > remote_pad = remote->num_pads - 1;

--
Regards,

Laurent Pinchart