From: Peilin Ye <yepeilin.cs@gmail.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: syzkaller-bugs@googlegroups.com,
linux-kernel-mentees@lists.linuxfoundation.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [Linux-kernel-mentees] [PATCH] v4l2-tpg: Fix global-out-of-bounds read in precalculate_color()
Date: Wed, 19 Aug 2020 11:16:56 -0400 [thread overview]
Message-ID: <20200819151656.GA106705@PWN> (raw)
In-Reply-To: <774bcf2d-c8eb-086a-3569-c7e530d8a63d@xs4all.nl>
Hi Mr. Verkuil,
On Wed, Aug 19, 2020 at 04:26:28PM +0200, Hans Verkuil wrote:
> Hi Peilin,
>
> On 10/08/2020 07:05, Peilin Ye wrote:
> > precalculate_color() is reading out of `sin` since `tpg->hue` is not being
> > properly checked. Fix it. `cos` is safe, as long as `tpg->hue` is higher
> > than or equal to -192.
>
> Thank you for this patch, but there is something I don't understand, namely
> just *how* tpg->hue can be out-of-range.
>
> From what I can see vivid sets hue via tpg_s_hue() when the V4L2_CID_HUE control
> is set. But that control has a range of -128...128, so ctrl->val should always be in
> that range.
>
> I would really like to know 1) what the value of tpg->hue actually is when it goes
> out of range, and 2) who is changing it to that value. Can you do a bit more digging?
Sure, of course! I will try to figure that out first.
Thank you,
Peilin
> That said, it makes sense that precalculate_color() avoids reading out-of-bounds.
>
> >
> > Fixes: 63881df94d3e ("[media] vivid: add the Test Pattern Generator")
> > Reported-and-tested-by: syzbot+02d9172bf4c43104cd70@syzkaller.appspotmail.com
> > Link: https://syzkaller.appspot.com/bug?id=db50123c788e2cc5a9d90de569c398b66293ee48
> > Signed-off-by: Peilin Ye <yepeilin.cs@gmail.com>
> > ---
> > drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > index 50f1e0b28b25..52205fe096f7 100644
> > --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > @@ -930,6 +930,9 @@ static void precalculate_color(struct tpg_data *tpg, int k)
> > /* Implement these operations */
> > int tmp_cb, tmp_cr;
> >
> > + if (tpg->hue < -128 || tpg->hue > 128)
> > + return;
>
> Rather than returning here, I prefer to just clamp tpg->hue to the valid range.
>
> I'd be willing to merge a patch that clamps tpg->hue (it certainly doesn't hurt),
> but I also would like to understand how it can be out of range in the first place.
> I have the feeling that this is a symptom of another problem elsewhere.
>
> Regards,
>
> Hans
>
> > +
> > /* First convert to YCbCr */
> >
> > color_to_ycbcr(tpg, r, g, b, &y, &cb, &cr);
> >
>
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
WARNING: multiple messages have this Message-ID (diff)
From: Peilin Ye <yepeilin.cs@gmail.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-media@vger.kernel.org,
linux-kernel-mentees@lists.linuxfoundation.org,
syzkaller-bugs@googlegroups.com, linux-kernel@vger.kernel.org
Subject: Re: [Linux-kernel-mentees] [PATCH] v4l2-tpg: Fix global-out-of-bounds read in precalculate_color()
Date: Wed, 19 Aug 2020 11:16:56 -0400 [thread overview]
Message-ID: <20200819151656.GA106705@PWN> (raw)
In-Reply-To: <774bcf2d-c8eb-086a-3569-c7e530d8a63d@xs4all.nl>
Hi Mr. Verkuil,
On Wed, Aug 19, 2020 at 04:26:28PM +0200, Hans Verkuil wrote:
> Hi Peilin,
>
> On 10/08/2020 07:05, Peilin Ye wrote:
> > precalculate_color() is reading out of `sin` since `tpg->hue` is not being
> > properly checked. Fix it. `cos` is safe, as long as `tpg->hue` is higher
> > than or equal to -192.
>
> Thank you for this patch, but there is something I don't understand, namely
> just *how* tpg->hue can be out-of-range.
>
> From what I can see vivid sets hue via tpg_s_hue() when the V4L2_CID_HUE control
> is set. But that control has a range of -128...128, so ctrl->val should always be in
> that range.
>
> I would really like to know 1) what the value of tpg->hue actually is when it goes
> out of range, and 2) who is changing it to that value. Can you do a bit more digging?
Sure, of course! I will try to figure that out first.
Thank you,
Peilin
> That said, it makes sense that precalculate_color() avoids reading out-of-bounds.
>
> >
> > Fixes: 63881df94d3e ("[media] vivid: add the Test Pattern Generator")
> > Reported-and-tested-by: syzbot+02d9172bf4c43104cd70@syzkaller.appspotmail.com
> > Link: https://syzkaller.appspot.com/bug?id=db50123c788e2cc5a9d90de569c398b66293ee48
> > Signed-off-by: Peilin Ye <yepeilin.cs@gmail.com>
> > ---
> > drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > index 50f1e0b28b25..52205fe096f7 100644
> > --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> > @@ -930,6 +930,9 @@ static void precalculate_color(struct tpg_data *tpg, int k)
> > /* Implement these operations */
> > int tmp_cb, tmp_cr;
> >
> > + if (tpg->hue < -128 || tpg->hue > 128)
> > + return;
>
> Rather than returning here, I prefer to just clamp tpg->hue to the valid range.
>
> I'd be willing to merge a patch that clamps tpg->hue (it certainly doesn't hurt),
> but I also would like to understand how it can be out of range in the first place.
> I have the feeling that this is a symptom of another problem elsewhere.
>
> Regards,
>
> Hans
>
> > +
> > /* First convert to YCbCr */
> >
> > color_to_ycbcr(tpg, r, g, b, &y, &cb, &cr);
> >
>
next prev parent reply other threads:[~2020-08-19 15:17 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-10 5:05 [Linux-kernel-mentees] [PATCH] v4l2-tpg: Fix global-out-of-bounds read in precalculate_color() Peilin Ye
2020-08-10 5:05 ` Peilin Ye
2020-08-19 14:26 ` Hans Verkuil
2020-08-19 14:26 ` Hans Verkuil
2020-08-19 15:16 ` Peilin Ye [this message]
2020-08-19 15:16 ` Peilin Ye
2020-08-21 9:48 ` Peilin Ye
2020-08-21 9:48 ` Peilin Ye
2020-08-21 10:12 ` Hans Verkuil
2020-08-21 10:12 ` Hans Verkuil
2020-08-21 10:26 ` Peilin Ye
2020-08-21 10:26 ` Peilin Ye
2020-08-21 12:46 ` [Linux-kernel-mentees] [PATCH v2] vivid: " Peilin Ye
2020-08-21 12:46 ` Peilin Ye
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=20200819151656.GA106705@PWN \
--to=yepeilin.cs@gmail.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-kernel-mentees@lists.linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=syzkaller-bugs@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.