Message ID | 20201106144847.7726-1-georgi.djakov@linaro.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 7381e27b1e563aa8a1c6bcf74a8cadb6901c283a |
Headers | show |
Series | interconnect: qcom: msm8974: Prevent integer overflow in rate | expand |
On Fri, Nov 06, 2020 at 04:48:47PM +0200, Georgi Djakov wrote: > When sync_state support got introduced recently, by default we try to > set the NoCs to run initially at maximum rate. But as these values are > aggregated, we may end with a really big clock rate value, which is > then converted from "u64" to "long" during the clock rate rounding. > But on 32bit platforms this may result an overflow. Fix it by making > sure that the rate is within range. > > Reported-by: Luca Weiss <luca@z3ntu.xyz> > Fixes: b1d681d8d324 ("interconnect: Add sync state support") > Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org> Reviewed-by: Brian Masney <masneyb@onstation.org>
Hello: This patch was applied to qcom/linux.git (refs/heads/for-next): On Fri, 6 Nov 2020 16:48:47 +0200 you wrote: > When sync_state support got introduced recently, by default we try to > set the NoCs to run initially at maximum rate. But as these values are > aggregated, we may end with a really big clock rate value, which is > then converted from "u64" to "long" during the clock rate rounding. > But on 32bit platforms this may result an overflow. Fix it by making > sure that the rate is within range. > > [...] Here is the summary with links: - interconnect: qcom: msm8974: Prevent integer overflow in rate https://git.kernel.org/qcom/c/7381e27b1e56 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/drivers/interconnect/qcom/msm8974.c b/drivers/interconnect/qcom/msm8974.c index 3a313e11e73d..b6b639dad691 100644 --- a/drivers/interconnect/qcom/msm8974.c +++ b/drivers/interconnect/qcom/msm8974.c @@ -618,6 +618,8 @@ static int msm8974_icc_set(struct icc_node *src, struct icc_node *dst) do_div(rate, src_qn->buswidth); + rate = min_t(u32, rate, INT_MAX); + if (src_qn->rate == rate) return 0; @@ -758,6 +760,7 @@ static struct platform_driver msm8974_noc_driver = { .driver = { .name = "qnoc-msm8974", .of_match_table = msm8974_noc_of_match, + .sync_state = icc_sync_state, }, }; module_platform_driver(msm8974_noc_driver);
When sync_state support got introduced recently, by default we try to set the NoCs to run initially at maximum rate. But as these values are aggregated, we may end with a really big clock rate value, which is then converted from "u64" to "long" during the clock rate rounding. But on 32bit platforms this may result an overflow. Fix it by making sure that the rate is within range. Reported-by: Luca Weiss <luca@z3ntu.xyz> Fixes: b1d681d8d324 ("interconnect: Add sync state support") Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org> --- drivers/interconnect/qcom/msm8974.c | 3 +++ 1 file changed, 3 insertions(+)