lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 71/90] net: ipv4: really enforce backoff for redirects
    Date
    From: Paolo Abeni <pabeni@redhat.com>

    [ Upstream commit 57644431a6c2faac5d754ebd35780cf43a531b1a ]

    In commit b406472b5ad7 ("net: ipv4: avoid mixed n_redirects and
    rate_tokens usage") I missed the fact that a 0 'rate_tokens' will
    bypass the backoff algorithm.

    Since rate_tokens is cleared after a redirect silence, and never
    incremented on redirects, if the host keeps receiving packets
    requiring redirect it will reply ignoring the backoff.

    Additionally, the 'rate_last' field will be updated with the
    cadence of the ingress packet requiring redirect. If that rate is
    high enough, that will prevent the host from generating any
    other kind of ICMP messages

    The check for a zero 'rate_tokens' value was likely a shortcut
    to avoid the more complex backoff algorithm after a redirect
    silence period. Address the issue checking for 'n_redirects'
    instead, which is incremented on successful redirect, and
    does not interfere with other ICMP replies.

    Fixes: b406472b5ad7 ("net: ipv4: avoid mixed n_redirects and rate_tokens usage")
    Reported-and-tested-by: Colin Walters <walters@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/route.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/net/ipv4/route.c
    +++ b/net/ipv4/route.c
    @@ -898,7 +898,7 @@ void ip_rt_send_redirect(struct sk_buff
    /* Check for load limit; set rate_last to the latest sent
    * redirect.
    */
    - if (peer->rate_tokens == 0 ||
    + if (peer->n_redirects == 0 ||
    time_after(jiffies,
    (peer->rate_last +
    (ip_rt_redirect_load << peer->n_redirects)))) {

    \
     
     \ /
      Last update: 2020-05-18 20:40    [W:4.669 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site