diff options
| author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2018-01-30 22:21:48 -0600 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-01-31 10:26:30 -0500 | 
| commit | e4823fbd229bfbba368b40cdadb8f4eeb20604cc (patch) | |
| tree | d50137ddbc56c366b47879e9602af9836d71db70 /net/ipv4/tcp_nv.c | |
| parent | 086ca23d03c0d2f4088f472386778d293e15c5f6 (diff) | |
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>
Diffstat (limited to 'net/ipv4/tcp_nv.c')
| -rw-r--r-- | net/ipv4/tcp_nv.c | 2 | 
1 files changed, 1 insertions, 1 deletions
| diff --git a/net/ipv4/tcp_nv.c b/net/ipv4/tcp_nv.c index ddbce73edae8..764298e52577 100644 --- a/net/ipv4/tcp_nv.c +++ b/net/ipv4/tcp_nv.c @@ -364,7 +364,7 @@ static void tcpnv_acked(struct sock *sk, const struct ack_sample *sample)  		 */  		cwnd_by_slope = (u32)  			div64_u64(((u64)ca->nv_rtt_max_rate) * ca->nv_min_rtt, -				  (u64)(80000 * tp->mss_cache)); +				  80000ULL * tp->mss_cache);  		max_win = cwnd_by_slope + nv_pad;  		/* If cwnd > max_win, decrease cwnd | 
