• Paolo Abeni's avatar
    net: ipv4: avoid mixed n_redirects and rate_tokens usage · 124b64fe
    Paolo Abeni authored
    [ Upstream commit b406472b ]
    
    Since commit c09551c6 ("net: ipv4: use a dedicated counter
    for icmp_v4 redirect packets") we use 'n_redirects' to account
    for redirect packets, but we still use 'rate_tokens' to compute
    the redirect packets exponential backoff.
    
    If the device sent to the relevant peer any ICMP error packet
    after sending a redirect, it will also update 'rate_token' according
    to the leaking bucket schema; typically 'rate_token' will raise
    above BITS_PER_LONG and the redirect packets backoff algorithm
    will produce undefined behavior.
    
    Fix the issue using 'n_redirects' to compute the exponential backoff
    in ip_rt_send_redirect().
    
    Note that we still clear rate_tokens after a redirect silence period,
    to avoid changing an established behaviour.
    
    The root cause predates git history; before the mentioned commit in
    the critical scenario, the kernel stopped sending redirects, after
    the mentioned commit the behavior more randomic.
    Reported-by: default avatarXiumei Mu <xmu@redhat.com>
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Fixes: c09551c6 ("net: ipv4: use a dedicated counter for icmp_v4 redirect packets")
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarLorenzo Bianconi <lorenzo.bianconi@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    124b64fe
route.c 79.7 KB