[PATCH 1/2] ARM: imx: fix integer overflow in AV PLL round rate
Emil Lundmark
emil at limesaudio.com
Thu Oct 6 04:12:10 PDT 2016
Since parent_rate * mfn may overflow 32 bits, the result should be stored
using 64 bits.
This issue was previously addressed in ba7f4f557eb6, but this particular
case was not fixed.
Signed-off-by: Emil Lundmark <emil at limesaudio.com>
---
drivers/clk/imx/clk-pllv3.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c
index 19f9b62..bc7f163 100644
--- a/drivers/clk/imx/clk-pllv3.c
+++ b/drivers/clk/imx/clk-pllv3.c
@@ -247,7 +247,11 @@ static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
do_div(temp64, parent_rate);
mfn = temp64;
- return parent_rate * div + parent_rate * mfn / mfd;
+ temp64 = (u64)parent_rate;
+ temp64 *= mfn;
+ do_div(temp64, mfd);
+
+ return parent_rate * div + (u32)temp64;
}
static int clk_pllv3_av_set_rate(struct clk_hw *hw, unsigned long rate,
--
2.7.4
More information about the linux-arm-kernel
mailing list