From: David Laight <david.laight.linux@gmail.com>
To: Agalakov Daniil <ade@amicon.ru>
Cc: Steve Longerbeam <slongerbeam@gmail.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Maxime Ripard <mripard@kernel.org>,
Jacopo Mondi <jacopo+renesas@jmondi.org>,
<linux-media@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<lvc-project@linuxtesting.org>, Roman Razov <rrv@amicon.ru>
Subject: Re: [PATCH] media: i2c: ov5640: Fix potential integer overflow in sysclk calculation
Date: Mon, 20 Apr 2026 19:46:24 +0100 [thread overview]
Message-ID: <20260420194624.695dbae0@pumpkin> (raw)
In-Reply-To: <20260420154007.2877949-1-ade@amicon.ru>
On Mon, 20 Apr 2026 18:39:50 +0300
Agalakov Daniil <ade@amicon.ru> wrote:
> The calculation of sysclk uses 32-bit arithmetic because
> sensor->xclk_freq is a 32-bit integer. The intermediate multiplication
> result can overflow 32 bits sysclk variable.
>
> For example, with pll_prediv fixed at 3 (OV5640_PLL_PREDIV), xclk_freq
> set to its maximum of 54MHz (OV5640_XCLK_MAX) and a pll_mult value above
> 238 (the maximum value for pll_mult is 252, defined as
> OV5640_PLL_MULT_MAX), the result exceeds the 32-bit limit.
>
> This overflow causes the 1GHz safety check to fail, as the truncated
> value fits within the 1GHz limit. Consequently, the function returns an
> incorrect frequency, leading to misconfiguration of the sensor.
>
> Explicitly cast the first operand to u64 to ensure the entire expression
> is evaluated in 64-bit precision.
>
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
>
> Fixes: aa2882481cad ("media: ov5640: Adjust the clock based on the expected rate")
> Signed-off-by: Agalakov Daniil <ade@amicon.ru>
> ---
> drivers/media/i2c/ov5640.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
> index 85ecc23b3587..04e5a683976a 100644
> --- a/drivers/media/i2c/ov5640.c
> +++ b/drivers/media/i2c/ov5640.c
> @@ -1377,7 +1377,7 @@ static unsigned long ov5640_compute_sys_clk(struct ov5640_dev *sensor,
> u8 pll_prediv, u8 pll_mult,
> u8 sysdiv)
> {
> - unsigned long sysclk = sensor->xclk_freq / pll_prediv * pll_mult;
> + u64 sysclk = (u64)sensor->xclk_freq / pll_prediv * pll_mult;
>
> /* PLL1 output cannot exceed 1GHz. */
> if (sysclk / 1000000 > 1000)
It would be much better to rework the test to avoid a 64bit divide
(which will fail to compile on 32bit).
Even the 'sysclk / 1000000 > 1000' test may fail to compile,
the compiler might convert it so the equivalent 'sysclk > 1000999999'
to avoid the division.
I don't know if that is the correct test - it doesn't match the comment.
You could do something like:
u32 sysclk;
if ((sensor->xclk_freq >> 8) * pll_mult > (2000000000 >> 8) * pll_prediv)
/* output would be over 2GHz (or thereabouts) */
...
sysclk = sensor->xclk_freq / pll_prediv * pll_mult;
if (sysclk > 1000000000)
/* output is over 1GHz */
David
prev parent reply other threads:[~2026-04-20 18:46 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-20 15:39 [PATCH] media: i2c: ov5640: Fix potential integer overflow in sysclk calculation Agalakov Daniil
2026-04-20 18:46 ` David Laight [this message]
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=20260420194624.695dbae0@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=ade@amicon.ru \
--cc=jacopo+renesas@jmondi.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=lvc-project@linuxtesting.org \
--cc=mchehab@kernel.org \
--cc=mripard@kernel.org \
--cc=rrv@amicon.ru \
--cc=sakari.ailus@linux.intel.com \
--cc=slongerbeam@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox