• Cambda Zhu's avatar
    net: Limit logical shift left of TCP probe0 timeout · 6d4634d1
    Cambda Zhu authored
    For each TCP zero window probe, the icsk_backoff is increased by one and
    its max value is tcp_retries2. If tcp_retries2 is greater than 63, the
    probe0 timeout shift may exceed its max bits. On x86_64/ARMv8/MIPS, the
    shift count would be masked to range 0 to 63. And on ARMv7 the result is
    zero. If the shift count is masked, only several probes will be sent
    with timeout shorter than TCP_RTO_MAX. But if the timeout is zero, it
    needs tcp_retries2 times probes to end this false timeout. Besides,
    bitwise shift greater than or equal to the width is an undefined
    behavior.
    
    This patch adds a limit to the backoff. The max value of max_when is
    TCP_RTO_MAX and the min value of timeout base is TCP_RTO_MIN. The limit
    is the backoff from TCP_RTO_MIN to TCP_RTO_MAX.
    Signed-off-by: default avatarCambda Zhu <cambda@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20201208091910.37618-1-cambda@linux.alibaba.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    6d4634d1
tcp.h 71.7 KB