]> www.infradead.org Git - users/hch/misc.git/commitdiff
udp: refine __udp_enqueue_schedule_skb() test
authorEric Dumazet <edumazet@google.com>
Tue, 16 Sep 2025 16:09:46 +0000 (16:09 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 18 Sep 2025 08:17:10 +0000 (10:17 +0200)
Commit 5a465a0da13e ("udp: Fix multiple wraparounds
of sk->sk_rmem_alloc.") allowed to slightly overshoot
sk->sk_rmem_alloc, when many cpus are trying
to feed packets to a common UDP socket.

This patch, combined with the following one reduces
false sharing on the victim socket under DDOS.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250916160951.541279-6-edumazet@google.com
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/ipv4/udp.c

index cca41c569f37621404829e096306ba7d78ce4d43..edd846fee90ff7850356a5cb3400ce96856e5429 100644 (file)
@@ -1739,8 +1739,8 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb)
                if (rcvbuf > INT_MAX >> 1)
                        goto drop;
 
-               /* Always allow at least one packet for small buffer. */
-               if (rmem > rcvbuf)
+               /* Accept the packet if queue is empty. */
+               if (rmem)
                        goto drop;
        }