diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 3bc1ba937a21..384b9f0f8a15 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1801,6 +1801,14 @@ try_again: } WARN_ON_ONCE(!skb_set_owner_sk_safe(skb, sk)); + + /* + * skb->dev still aliases the UDP rx dev_scratch (its charge was freed + * on dequeue above); a sockmap verdict program may deref it via + * bpf_sk_lookup_*(), so clear it -> bpf_skc_lookup() uses skb->sk + */ + skb->dev = NULL; + return recv_actor(sk, skb); } EXPORT_SYMBOL(udp_read_skb);