This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dvb-frontends: tda10048: Fix integer overflow
Author:  Ricardo Ribalda <riba...@chromium.org>
Date:    Mon Apr 29 16:05:04 2024 +0100

state->xtal_hz can be up to 16M, so it can overflow a 32 bit integer
when multiplied by pll_mfactor.

Create a new 64 bit variable to hold the calculations.

Link: 
https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-25-3c4865f5a...@chromium.org
Reported-by: Dan Carpenter <dan.carpen...@linaro.org>
Signed-off-by: Ricardo Ribalda <riba...@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mche...@kernel.org>

 drivers/media/dvb-frontends/tda10048.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/dvb-frontends/tda10048.c 
b/drivers/media/dvb-frontends/tda10048.c
index 5d5e4e9e4422..3e725cdcc66b 100644
--- a/drivers/media/dvb-frontends/tda10048.c
+++ b/drivers/media/dvb-frontends/tda10048.c
@@ -410,6 +410,7 @@ static int tda10048_set_if(struct dvb_frontend *fe, u32 bw)
        struct tda10048_config *config = &state->config;
        int i;
        u32 if_freq_khz;
+       u64 sample_freq;
 
        dprintk(1, "%s(bw = %d)\n", __func__, bw);
 
@@ -451,9 +452,11 @@ static int tda10048_set_if(struct dvb_frontend *fe, u32 bw)
        dprintk(1, "- pll_pfactor = %d\n", state->pll_pfactor);
 
        /* Calculate the sample frequency */
-       state->sample_freq = state->xtal_hz * (state->pll_mfactor + 45);
-       state->sample_freq /= (state->pll_nfactor + 1);
-       state->sample_freq /= (state->pll_pfactor + 4);
+       sample_freq = state->xtal_hz;
+       sample_freq *= state->pll_mfactor + 45;
+       do_div(sample_freq, state->pll_nfactor + 1);
+       do_div(sample_freq, state->pll_pfactor + 4);
+       state->sample_freq = sample_freq;
        dprintk(1, "- sample_freq = %d\n", state->sample_freq);
 
        /* Update the I/F */

Reply via email to