]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: ipv4: make udp_v4_early_demux explicitly return drop reason
authorAntoine Tenart <atenart@kernel.org>
Mon, 15 Sep 2025 09:19:54 +0000 (11:19 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 20 Sep 2025 00:35:51 +0000 (17:35 -0700)
udp_v4_early_demux already returns drop reasons as it either returns 0
or ip_mc_validate_source, which itself returns drop reasons. Its return
value is also already used as a drop reason itself.

Makes this explicit by making it return drop reasons.

Signed-off-by: Antoine Tenart <atenart@kernel.org>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20250915091958.15382-2-atenart@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/udp.h
net/ipv4/ip_input.c
net/ipv4/udp.c

index eecd64097f91196897f45530540b9c9b68c5ba4e..059a0cee5f559b8d75e71031a00d0aa2769e257f 100644 (file)
@@ -404,7 +404,7 @@ static inline struct sk_buff *skb_recv_udp(struct sock *sk, unsigned int flags,
        return __skb_recv_udp(sk, flags, &off, err);
 }
 
-int udp_v4_early_demux(struct sk_buff *skb);
+enum skb_drop_reason udp_v4_early_demux(struct sk_buff *skb);
 bool udp_sk_rx_dst_set(struct sock *sk, struct dst_entry *dst);
 int udp_err(struct sk_buff *, u32);
 int udp_abort(struct sock *sk, int err);
index a09aca2c8567daf8ad1c9cc9f26291e1b4c2d36f..8878e865ddf6cd45c8e746060d014b2e5e2e1026 100644 (file)
@@ -319,7 +319,7 @@ static bool ip_can_use_hint(const struct sk_buff *skb, const struct iphdr *iph,
 }
 
 int tcp_v4_early_demux(struct sk_buff *skb);
-int udp_v4_early_demux(struct sk_buff *skb);
+enum skb_drop_reason udp_v4_early_demux(struct sk_buff *skb);
 static int ip_rcv_finish_core(struct net *net,
                              struct sk_buff *skb, struct net_device *dev,
                              const struct sk_buff *hint)
index 0c40426628eb2306b609881341a51307c4993871..85cfc32eb2ccb3e229177fb37910fefde0254ffe 100644 (file)
@@ -2811,7 +2811,7 @@ static struct sock *__udp4_lib_demux_lookup(struct net *net,
        return NULL;
 }
 
-int udp_v4_early_demux(struct sk_buff *skb)
+enum skb_drop_reason udp_v4_early_demux(struct sk_buff *skb)
 {
        struct net *net = dev_net(skb->dev);
        struct in_device *in_dev = NULL;
@@ -2825,7 +2825,7 @@ int udp_v4_early_demux(struct sk_buff *skb)
 
        /* validate the packet */
        if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct udphdr)))
-               return 0;
+               return SKB_NOT_DROPPED_YET;
 
        iph = ip_hdr(skb);
        uh = udp_hdr(skb);
@@ -2834,12 +2834,12 @@ int udp_v4_early_demux(struct sk_buff *skb)
                in_dev = __in_dev_get_rcu(skb->dev);
 
                if (!in_dev)
-                       return 0;
+                       return SKB_NOT_DROPPED_YET;
 
                ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr,
                                       iph->protocol);
                if (!ours)
-                       return 0;
+                       return SKB_NOT_DROPPED_YET;
 
                sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr,
                                                   uh->source, iph->saddr,
@@ -2850,7 +2850,7 @@ int udp_v4_early_demux(struct sk_buff *skb)
        }
 
        if (!sk)
-               return 0;
+               return SKB_NOT_DROPPED_YET;
 
        skb->sk = sk;
        DEBUG_NET_WARN_ON_ONCE(sk_is_refcounted(sk));
@@ -2877,7 +2877,7 @@ int udp_v4_early_demux(struct sk_buff *skb)
                                                     ip4h_dscp(iph),
                                                     skb->dev, in_dev, &itag);
        }
-       return 0;
+       return SKB_NOT_DROPPED_YET;
 }
 
 int udp_rcv(struct sk_buff *skb)