Re: [PATCH 5/6] media: staging: ipu3-imgu: Add range check for imgu_css_cfg_acc_stripe

Ricardo Ribalda
2026-04-28T13:18:07Z

HI Laurent

On Tue, 28 Apr 2026 at 15:13, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> On Tue, Apr 28, 2026 at 12:41:11PM +0000, Ricardo Ribalda wrote:
> > If the driver's stripe information is invalid it can result in an integer
> > overflow. Add a range check with a WARN_ON to expose this kind of
> > error.
> >
> > This patch fixes the following smatch error:
> > drivers/staging/media/ipu3/ipu3-css-params.c:1792 imgu_css_cfg_acc_stripe() warn: 'acc->stripe.bds_out_stripes[0]->width - 2 * f' 4294967168 can't fit into 65535 'acc->stripe.bds_out_stripes[1]->offset'
> >
> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > ---
> > drivers/staging/media/ipu3/ipu3-css-params.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/staging/media/ipu3/ipu3-css-params.c b/drivers/staging/media/ipu3/ipu3-css-params.c
> > index 2c48d57a3180..6ed23c7a0c3f 100644
> > --- a/drivers/staging/media/ipu3/ipu3-css-params.c
> > +++ b/drivers/staging/media/ipu3/ipu3-css-params.c
> > @@ -1770,6 +1770,8 @@ static int imgu_css_cfg_acc_stripe(struct imgu_css *css, unsigned int pipe,
> > acc->stripe.bds_out_stripes[0].width =
> > ALIGN(css_pipe->rect[IPU3_CSS_RECT_BDS].width, f);
> > } else {
> > + u32 offset;
> > +
> > /* Image processing is divided into two stripes */
> > acc->stripe.bds_out_stripes[0].width =
> > acc->stripe.bds_out_stripes[1].width =
> > @@ -1788,8 +1790,10 @@ static int imgu_css_cfg_acc_stripe(struct imgu_css *css, unsigned int pipe,
> > acc->stripe.bds_out_stripes[1].width += f;
> > }
> > /* Overlap between stripes is IPU3_UAPI_ISP_VEC_ELEMS * 4 */
> > - acc->stripe.bds_out_stripes[1].offset =
> > - acc->stripe.bds_out_stripes[0].width - 2 * f;
> > + offset = acc->stripe.bds_out_stripes[0].width - 2 * f;
> > + if (WARN_ON(offset > 65535))
>
> If this can be triggered by userspace it shouldn't WARN_ON().

v2 will not have the WARN_ON.

Thanks!

>
> > + return -EINVAL;
> > + acc->stripe.bds_out_stripes[1].offset = offset;
> > }
> >
> > acc->stripe.effective_stripes[0].height =
>
> --
> Regards,
>
> Laurent Pinchart

--
Ricardo Ribalda