Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net/mlx4_en: Prevent potential integer overflow calculating Hz

The "freq" variable is in terms of MHz and "max_val_cycles" is in terms
of Hz. The fact that "max_val_cycles" is a u64 suggests that support
for high frequency is intended but the "freq_khz * 1000" would overflow
the u32 type if we went above 4GHz. Use unsigned long long type for the
mutliplication to prevent that.

Fixes: 31c128b66e5b ("net/mlx4_en: Choose time-stamping shift value according to HW frequency")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/aDbFHe19juIJKjsb@stanley.mountain
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Dan Carpenter and committed by
Paolo Abeni
54d34165 ba99c627

+1 -1
+1 -1
drivers/net/ethernet/mellanox/mlx4/en_clock.c
··· 249 249 static u32 freq_to_shift(u16 freq) 250 250 { 251 251 u32 freq_khz = freq * 1000; 252 - u64 max_val_cycles = freq_khz * 1000 * MLX4_EN_WRAP_AROUND_SEC; 252 + u64 max_val_cycles = freq_khz * 1000ULL * MLX4_EN_WRAP_AROUND_SEC; 253 253 u64 max_val_cycles_rounded = 1ULL << fls64(max_val_cycles - 1); 254 254 /* calculate max possible multiplier in order to fit in 64bit */ 255 255 u64 max_mul = div64_u64(ULLONG_MAX, max_val_cycles_rounded);