[PATCH] net: stmmac_tc: use 64-bit arithmetic instead of 32-bit

From: Gustavo A. R. Silva
Date: Mon Jul 02 2018 - 08:09:46 EST


Add suffix UL to constant 1024 in order to give the compiler complete
information about the proper arithmetic to use. Notice that this
constant is used in a context that expects an expression of type
u64 (64 bits, unsigned) and following expressions are currently
being evaluated using 32-bit arithmetic:

qopt->idleslope * 1024 * ptr
qopt->hicredit * 1024 * 8
qopt->locredit * 1024 * 8

Addresses-Coverity-ID: 1470246 ("Unintentional integer overflow")
Addresses-Coverity-ID: 1470248 ("Unintentional integer overflow")
Addresses-Coverity-ID: 1470249 ("Unintentional integer overflow")
Signed-off-by: Gustavo A. R. Silva <gustavo@xxxxxxxxxxxxxx>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
index 0b0fca0..8fedc28 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
@@ -321,7 +321,7 @@ static int tc_setup_cbs(struct stmmac_priv *priv,
speed_div = (priv->speed == SPEED_100) ? 100000 : 1000000;

/* Final adjustments for HW */
- value = qopt->idleslope * 1024 * ptr;
+ value = qopt->idleslope * 1024UL * ptr;
do_div(value, speed_div);
priv->plat->tx_queues_cfg[queue].idle_slope = value & GENMASK(31, 0);

@@ -329,10 +329,10 @@ static int tc_setup_cbs(struct stmmac_priv *priv,
do_div(value, speed_div);
priv->plat->tx_queues_cfg[queue].send_slope = value & GENMASK(31, 0);

- value = qopt->hicredit * 1024 * 8;
+ value = qopt->hicredit * 1024UL * 8;
priv->plat->tx_queues_cfg[queue].high_credit = value & GENMASK(31, 0);

- value = qopt->locredit * 1024 * 8;
+ value = qopt->locredit * 1024UL * 8;
priv->plat->tx_queues_cfg[queue].low_credit = value & GENMASK(31, 0);

ret = stmmac_config_cbs(priv, priv->hw,
--
2.7.4