net/mlx4_en: Prevent potential integer overflow calculating Hz
[ Upstream commit54d34165b4] 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:31c128b66e("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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2e3d96ad95
commit
1b2e54f447
@@ -249,7 +249,7 @@ static const struct ptp_clock_info mlx4_en_ptp_clock_info = {
|
||||
static u32 freq_to_shift(u16 freq)
|
||||
{
|
||||
u32 freq_khz = freq * 1000;
|
||||
u64 max_val_cycles = freq_khz * 1000 * MLX4_EN_WRAP_AROUND_SEC;
|
||||
u64 max_val_cycles = freq_khz * 1000ULL * MLX4_EN_WRAP_AROUND_SEC;
|
||||
u64 max_val_cycles_rounded = 1ULL << fls64(max_val_cycles - 1);
|
||||
/* calculate max possible multiplier in order to fit in 64bit */
|
||||
u64 max_mul = div64_u64(ULLONG_MAX, max_val_cycles_rounded);
|
||||
|
||||
Reference in New Issue
Block a user