| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> |
| Date: Tue, 30 Jan 2018 22:21:48 -0600 |
| Subject: tcp_nv: fix potential integer overflow in tcpnv_acked |
| |
| From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> |
| |
| [ Upstream commit e4823fbd229bfbba368b40cdadb8f4eeb20604cc ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/tcp_nv.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/ipv4/tcp_nv.c |
| +++ b/net/ipv4/tcp_nv.c |
| @@ -338,7 +338,7 @@ static void tcpnv_acked(struct sock *sk, |
| */ |
| 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 |