linux/dim: Fix overflow in dim calculation
authorYamin Friedman <yaminf@mellanox.com>
Tue, 23 Jul 2019 07:22:47 +0000 (10:22 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 25 Jul 2019 18:34:39 +0000 (11:34 -0700)
commitf06d0ca45827a5790d7508de4759aed976933d4d
treef3129a536a3e647dc47f0acc9f9fcfd5230fbf4b
parentc8ec4632c6ac9cda0e8c3d51aa41eeab66585bd5
linux/dim: Fix overflow in dim calculation

While using net_dim, a dim_sample was used without ever initializing the
comps value. Added use of DIV_ROUND_DOWN_ULL() to prevent potential
overflow, it should not be a problem to save the final result in an int
because after the division by epms the value should not be larger than a
few thousand.

[ 1040.127124] UBSAN: Undefined behaviour in lib/dim/dim.c:78:23
[ 1040.130118] signed integer overflow:
[ 1040.131643] 134718714 * 100 cannot be represented in type 'int'

Fixes: 398c2b05bbee ("linux/dim: Add completions count to dim_sample")
Signed-off-by: Yamin Friedman <yaminf@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Acked-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bcmsysport.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c
lib/dim/dim.c