Message ID | 20240307163020.2524409-1-edumazet@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | d721812aa875a898eb38b2729abf6e96abdb357b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] ipv4: raw: check sk->sk_rcvbuf earlier | expand |
Eric Dumazet wrote: > 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 <edumazet@google.com> Reviewed-by: Willem de Bruijn <willemb@google.com>
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 7 Mar 2024 16:30:20 +0000 you wrote: > 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 <edumazet@google.com> > --- > net/ipv4/raw.c | 7 +++++++ > 1 file changed, 7 insertions(+) Here is the summary with links: - [net-next] ipv4: raw: check sk->sk_rcvbuf earlier https://git.kernel.org/netdev/net-next/c/d721812aa875 You are awesome, thank you!
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 494a6284bd7ee346a4fca7a161477e6dc5ed5021..42ac434cfcfa677ee58408297f4d3ac05d98b546 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -175,6 +175,13 @@ static int raw_v4_input(struct net *net, struct sk_buff *skb, if (!raw_v4_match(net, sk, iph->protocol, iph->saddr, iph->daddr, dif, sdif)) continue; + + if (atomic_read(&sk->sk_rmem_alloc) >= + READ_ONCE(sk->sk_rcvbuf)) { + atomic_inc(&sk->sk_drops); + continue; + } + delivered = 1; if ((iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) && ip_mc_sf_allow(sk, iph->daddr, iph->saddr,
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 <edumazet@google.com> --- net/ipv4/raw.c | 7 +++++++ 1 file changed, 7 insertions(+)