• Jesper Dangaard Brouer's avatar
    net: don't global ICMP rate limit packets originating from loopback · 849a44de
    Jesper Dangaard Brouer authored
    Florian Weimer seems to have a glibc test-case which requires that
    loopback interfaces does not get ICMP ratelimited.  This was broken by
    commit c0303efe ("net: reduce cycles spend on ICMP replies that
    gets rate limited").
    
    An ICMP response will usually be routed back-out the same incoming
    interface.  Thus, take advantage of this and skip global ICMP
    ratelimit when the incoming device is loopback.  In the unlikely event
    that the outgoing it not loopback, due to strange routing policy
    rules, ICMP rate limiting still works via peer ratelimiting via
    icmpv4_xrlim_allow().  Thus, we should still comply with RFC1812
    (section 4.3.2.8 "Rate Limiting").
    
    This seems to fix the reproducer given by Florian.  While still
    avoiding to perform expensive and unneeded outgoing route lookup for
    rate limited packets (in the non-loopback case).
    
    Fixes: c0303efe ("net: reduce cycles spend on ICMP replies that gets rate limited")
    Reported-by: default avatarFlorian Weimer <fweimer@redhat.com>
    Reported-by: default avatar"H.J. Lu" <hjl.tools@gmail.com>
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    849a44de
icmp.c 29.7 KB