interconnect: qcom: msm8974: Prevent integer overflow in rate
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> Reviewed-by: Brian Masney <masneyb@onstation.org> Link: https://lore.kernel.org/r/20201106144847.7726-1-georgi.djakov@linaro.org Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
This commit is contained in:
parent
3cea11cd5e
commit
7381e27b1e
|
@ -618,6 +618,8 @@ static int msm8974_icc_set(struct icc_node *src, struct icc_node *dst)
|
||||||
|
|
||||||
do_div(rate, src_qn->buswidth);
|
do_div(rate, src_qn->buswidth);
|
||||||
|
|
||||||
|
rate = min_t(u32, rate, INT_MAX);
|
||||||
|
|
||||||
if (src_qn->rate == rate)
|
if (src_qn->rate == rate)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -758,6 +760,7 @@ static struct platform_driver msm8974_noc_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "qnoc-msm8974",
|
.name = "qnoc-msm8974",
|
||||||
.of_match_table = msm8974_noc_of_match,
|
.of_match_table = msm8974_noc_of_match,
|
||||||
|
.sync_state = icc_sync_state,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
module_platform_driver(msm8974_noc_driver);
|
module_platform_driver(msm8974_noc_driver);
|
||||||
|
|
Loading…
Reference in New Issue