net: tcp: dctcp_update_alpha() fixes.
authorEric Dumazet <edumazet@google.com>
Thu, 11 Jun 2015 05:11:17 +0000 (22:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Jun 2015 06:28:33 +0000 (23:28 -0700)
commitf9c2ff22bb2df7b8f153afd2a4bea07176bad144
tree3afd7e841d7d0b785d7e1e8678e5cd2372ca2d14
parent1edaa7e8a7e753bd42d795bf289a6488aeae7f56
net: tcp: dctcp_update_alpha() fixes.

dctcp_alpha can be read by from dctcp_get_info() without
synchro, so use WRITE_ONCE() to prevent compiler from using
dctcp_alpha as a temporary variable.

Also, playing with small dctcp_shift_g (like 1), can expose
an overflow with 32bit values shifted 9 times before divide.

Use an u64 field to avoid this problem, and perform the divide
only if acked_bytes_ecn is not zero.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_dctcp.c