diff mbox series

media: Fix invalid link creation when source entity has 0 pads

Message ID 67e26157.0c0a0220.36adcd.506e@mx.google.com (mailing list archive)
State New
Headers show
Series media: Fix invalid link creation when source entity has 0 pads | expand

Commit Message

Gabriel March 25, 2025, 7:55 a.m. UTC
>From 307209d175be0145e36b9cf95944e2e62afeab11 Mon Sep 17 00:00:00 2001
From: Gabriel Shahrouzi <gshahrouzi@gmail.com>
Date: Mon, 24 Mar 2025 19:45:55 -0400
Subject: [PATCH] media: Fix invalid link creation when source entity has 0
 pads

This patch addresses the warning triggered in the media_create_pad_link()
function, specifically related to the check WARN_ON(source_pad >=
source->num_pads). The fix proposed adds an additional check to ensure that
source->num_pads is non-zero before proceeding with the
media_create_pad_link() function.

Reported-by: syzbot+701fc9cc0cb44e2b0fe9@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=701fc9cc0cb44e2b0fe9
Tested-by: syzbot+701fc9cc0cb44e2b0fe9@syzkaller.appspotmail.com
Fixes: a3fbc2e6bb05 ("media: mc-entity.c: use WARN_ON, validate link pads")
Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
---
 drivers/media/usb/uvc/uvc_entity.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ricardo Ribalda March 25, 2025, 8:56 a.m. UTC | #1
Hi Gabriel

On Tue, 25 Mar 2025 at 08:55, <gshahrouzi@gmail.com> wrote:
>
> >From 307209d175be0145e36b9cf95944e2e62afeab11 Mon Sep 17 00:00:00 2001
> From: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> Date: Mon, 24 Mar 2025 19:45:55 -0400
> Subject: [PATCH] media: Fix invalid link creation when source entity has 0
>  pads
>
> This patch addresses the warning triggered in the media_create_pad_link()
> function, specifically related to the check WARN_ON(source_pad >=
> source->num_pads). The fix proposed adds an additional check to ensure that
> source->num_pads is non-zero before proceeding with the
> media_create_pad_link() function.
>
> Reported-by: syzbot+701fc9cc0cb44e2b0fe9@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=701fc9cc0cb44e2b0fe9
I cannot reach that URL
> Tested-by: syzbot+701fc9cc0cb44e2b0fe9@syzkaller.appspotmail.com
> Fixes: a3fbc2e6bb05 ("media: mc-entity.c: use WARN_ON, validate link pads")
Shouldn't it be? :
Fixes: 4ffc2d89f38a ("[media] uvcvideo: Register subdevices for each entity")

> Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> ---
>  drivers/media/usb/uvc/uvc_entity.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
> index cc68dd24eb42..5397ce76c218 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)
Shouldn't source->num_pads be the same as remote->num_pads?

Are you sure that your kernel does not contain?
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/media/usb/uvc/uvc_entity.c?id=41ddb251c68ac75c101d3a50a68c4629c9055e4c

Regards!

>                         continue;
>
>                 remote_pad = remote->num_pads - 1;
> --
> 2.43.0
>
Gabriel March 25, 2025, 10:05 p.m. UTC | #2
Hi Ricardo,

> I cannot reach that URL
I was unable to access the URL from my email client when I initially
sent the email, but a couple of hours later, I was able to. Initially,
copying and pasting the URL into the browser provided a workaround.

> Shouldn't it be?:
> Fixes: 4ffc2d89f38a ("[media] uvcvideo: Register subdevices for each entity")
You're right, I incorrectly referenced the wrong commit. However, I’m
not certain if it should reference a96aa5342d57 (Fixes: a96aa5342d57 -
'[media] uvcvideo: Ignore entities for terminals with no supported
format') as it's the latest commit affecting the line I'm changing or
the one you mentioned.

> Shouldn't source->num_pads be the same as remote->num_pads?
The fuzzer (Syzkaller) that triggered the warning appears to have
encountered a case where source->num_pads and remote->num_pads were
different. When analyzing the case in GDB, remote->num_pads was 1,
while source->num_pads was 0.

> Are you sure that your kernel does not contain?
> https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/media/usb/uvc/uvc_entity.c?id=41ddb251c68ac75c101d3a50a68c4629c9055e4c
Yes, it should be included since I am running the upstream kernel.

Regards,
Gabriel
Laurent Pinchart March 26, 2025, 12:13 a.m. UTC | #3
On Tue, Mar 25, 2025 at 06:05:00PM -0400, Gabriel wrote:
> Hi Ricardo,
> 
> > I cannot reach that URL
> I was unable to access the URL from my email client when I initially
> sent the email, but a couple of hours later, I was able to. Initially,
> copying and pasting the URL into the browser provided a workaround.
> 
> > Shouldn't it be?:
> > Fixes: 4ffc2d89f38a ("[media] uvcvideo: Register subdevices for each entity")
> You're right, I incorrectly referenced the wrong commit. However, I’m
> not certain if it should reference a96aa5342d57 (Fixes: a96aa5342d57 -
> '[media] uvcvideo: Ignore entities for terminals with no supported
> format') as it's the latest commit affecting the line I'm changing or
> the one you mentioned.
> 
> > Shouldn't source->num_pads be the same as remote->num_pads?
> The fuzzer (Syzkaller) that triggered the warning appears to have
> encountered a case where source->num_pads and remote->num_pads were
> different. When analyzing the case in GDB, remote->num_pads was 1,
> while source->num_pads was 0.

This seems like the real bug that should be fixed.

> > Are you sure that your kernel does not contain?
> > https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/media/usb/uvc/uvc_entity.c?id=41ddb251c68ac75c101d3a50a68c4629c9055e4c
> Yes, it should be included since I am running the upstream kernel.
diff mbox series

Patch

diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
index cc68dd24eb42..5397ce76c218 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;