From: Eric Dumazet Date: Thu, 7 Mar 2024 16:29:43 +0000 (+0000) Subject: ipv6: raw: check sk->sk_rcvbuf earlier X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=026763ece881b4c636173c25d012cde085689027;p=linux.git ipv6: raw: check sk->sk_rcvbuf earlier There is no point cloning an skb and having to free the clone if the receive queue of the raw socket is full. Signed-off-by: Eric Dumazet Reviewed-by: Willem de Bruijn Link: https://lore.kernel.org/r/20240307162943.2523817-1-edumazet@google.com Signed-off-by: Jakub Kicinski --- diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 779274055abf9..ca49e6617afaf 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -160,6 +160,13 @@ static bool ipv6_raw_deliver(struct sk_buff *skb, int nexthdr) if (!raw_v6_match(net, sk, nexthdr, daddr, saddr, inet6_iif(skb), inet6_sdif(skb))) continue; + + if (atomic_read(&sk->sk_rmem_alloc) >= + READ_ONCE(sk->sk_rcvbuf)) { + atomic_inc(&sk->sk_drops); + continue; + } + delivered = true; switch (nexthdr) { case IPPROTO_ICMPV6: