]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: allow skb_release_head_state() to be called multiple times
authorEric Dumazet <edumazet@google.com>
Thu, 6 Nov 2025 20:29:33 +0000 (20:29 +0000)
committerJakub Kicinski <kuba@kernel.org>
Sat, 8 Nov 2025 03:02:39 +0000 (19:02 -0800)
Currently, only skb dst is cleared (thanks to skb_dst_drop())

Make sure skb->destructor, conntrack and extensions are cleared.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://patch.msgid.link/20251106202935.1776179-2-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/skbuff.c

index 5b4bc8b1c7d5674c19b64f8b15685d74632048fe..eeddb9e737ff28e47c77739db7b25ea68e5aa735 100644 (file)
@@ -1149,11 +1149,10 @@ void skb_release_head_state(struct sk_buff *skb)
                                skb);
 
 #endif
+               skb->destructor = NULL;
        }
-#if IS_ENABLED(CONFIG_NF_CONNTRACK)
-       nf_conntrack_put(skb_nfct(skb));
-#endif
-       skb_ext_put(skb);
+       nf_reset_ct(skb);
+       skb_ext_reset(skb);
 }
 
 /* Free everything but the sk_buff shell. */