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

Laurent Pinchart
2026-04-28T13:13:50Z

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().

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

--
Regards,

Laurent Pinchart