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

tcp_nv: fix potential integer overflow in tcpnv_acked

Add suffix ULL to constant 80000 in order to avoid a potential integer
overflow and 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.

The current cast to u64 effectively applies to the whole expression
as an argument of type u64 to be passed to div64_u64, but it does
not prevent it from being evaluated using 32-bit arithmetic instead
of 64-bit arithmetic.

Also, once the expression is properly evaluated using 64-bit arithmentic,
there is no need for the parentheses and the external cast to u64.

Addresses-Coverity-ID: 1357588 ("Unintentional integer overflow")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Gustavo A. R. Silva and committed by
David S. Miller
e4823fbd 086ca23d

+1 -1
+1 -1
net/ipv4/tcp_nv.c
··· 364 364 */ 365 365 cwnd_by_slope = (u32) 366 366 div64_u64(((u64)ca->nv_rtt_max_rate) * ca->nv_min_rtt, 367 - (u64)(80000 * tp->mss_cache)); 367 + 80000ULL * tp->mss_cache); 368 368 max_win = cwnd_by_slope + nv_pad; 369 369 370 370 /* If cwnd > max_win, decrease cwnd