When inet_getpeer_v4() fails to allocate a peer entry under memory pressure or tree size caps, ip_rt_send_redirect() previously fell back to sending an un-rate-limited ICMP Redirect. Because ICMP Redirect is not part of the global rate limit mask (sysctl_icmp_ratemask), sending ICMP Redirects when peer == NULL creates an un-rate-limited ICMP packet storm. Fix this by failing closed in ip_rt_send_redirect() when peer == NULL. Fixes: a853c609504e ("inetpeer: do not get a refcount in inet_getpeer()") Signed-off-by: Eric Dumazet --- net/ipv4/route.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 3f3de5164d6e5854cae3ebe6fcecbac10fb63418..152d8cb28f65aacee378521e16885c9cf1a4870e 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -892,8 +892,6 @@ void ip_rt_send_redirect(struct sk_buff *skb) peer = inet_getpeer_v4(net->ipv4.peers, ip_hdr(skb)->saddr, vif); if (!peer) { rcu_read_unlock(); - icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, - rt_nexthop(rt, ip_hdr(skb)->daddr)); return; } -- 2.55.0.229.g6434b31f56-goog