]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: core: move ip_ct_attach indirection to struct nf_ct_hook
authorFlorian Westphal <fw@strlen.de>
Fri, 7 Jan 2022 04:03:23 +0000 (05:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Mar 2024 14:38:46 +0000 (14:38 +0000)
[ Upstream commit 3fce16493dc1aa2c9af3d7e7bd360dfe203a3e6a ]

ip_ct_attach predates struct nf_ct_hook, we can place it there and
remove the exported symbol.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Stable-dep-of: 62e7151ae3eb ("netfilter: bridge: confirm multicast packets before passing them up the stack")
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/netfilter.h
net/netfilter/core.c
net/netfilter/nf_conntrack_core.c

index e20c2db0f2c16ec22586dd02f93033f3b12fa215..64acdf22eb4fa67731babb535feb7450856ef7a6 100644 (file)
@@ -435,7 +435,6 @@ nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family)
 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
 #include <linux/netfilter/nf_conntrack_zones_common.h>
 
-extern void (*ip_ct_attach)(struct sk_buff *, const struct sk_buff *) __rcu;
 void nf_ct_attach(struct sk_buff *, const struct sk_buff *);
 struct nf_conntrack_tuple;
 bool nf_ct_get_tuple_skb(struct nf_conntrack_tuple *dst_tuple,
@@ -458,6 +457,7 @@ struct nf_ct_hook {
        void (*destroy)(struct nf_conntrack *);
        bool (*get_tuple_skb)(struct nf_conntrack_tuple *,
                              const struct sk_buff *);
+       void (*attach)(struct sk_buff *nskb, const struct sk_buff *skb);
 };
 extern struct nf_ct_hook __rcu *nf_ct_hook;
 
index ffa84cafb746b5a108cfcd1872c80300da7c5ce5..5396d27ba6a715ce665970a522b01864421c0dcb 100644 (file)
@@ -639,25 +639,22 @@ struct nf_ct_hook __rcu *nf_ct_hook __read_mostly;
 EXPORT_SYMBOL_GPL(nf_ct_hook);
 
 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
-/* This does not belong here, but locally generated errors need it if connection
-   tracking in use: without this, connection may not be in hash table, and hence
-   manufactured ICMP or RST packets will not be associated with it. */
-void (*ip_ct_attach)(struct sk_buff *, const struct sk_buff *)
-               __rcu __read_mostly;
-EXPORT_SYMBOL(ip_ct_attach);
-
 struct nf_nat_hook __rcu *nf_nat_hook __read_mostly;
 EXPORT_SYMBOL_GPL(nf_nat_hook);
 
+/* This does not belong here, but locally generated errors need it if connection
+ * tracking in use: without this, connection may not be in hash table, and hence
+ * manufactured ICMP or RST packets will not be associated with it.
+ */
 void nf_ct_attach(struct sk_buff *new, const struct sk_buff *skb)
 {
-       void (*attach)(struct sk_buff *, const struct sk_buff *);
+       const struct nf_ct_hook *ct_hook;
 
        if (skb->_nfct) {
                rcu_read_lock();
-               attach = rcu_dereference(ip_ct_attach);
-               if (attach)
-                       attach(new, skb);
+               ct_hook = rcu_dereference(nf_ct_hook);
+               if (ct_hook)
+                       ct_hook->attach(new, skb);
                rcu_read_unlock();
        }
 }
index 10622760f894a6b02167b19ace2c87bbb0267cb3..779e41d1afdceb6122ad487c237848279e856606 100644 (file)
@@ -2518,7 +2518,6 @@ static int kill_all(struct nf_conn *i, void *data)
 void nf_conntrack_cleanup_start(void)
 {
        conntrack_gc_work.exiting = true;
-       RCU_INIT_POINTER(ip_ct_attach, NULL);
 }
 
 void nf_conntrack_cleanup_end(void)
@@ -2838,12 +2837,11 @@ static struct nf_ct_hook nf_conntrack_hook = {
        .update         = nf_conntrack_update,
        .destroy        = nf_ct_destroy,
        .get_tuple_skb  = nf_conntrack_get_tuple_skb,
+       .attach         = nf_conntrack_attach,
 };
 
 void nf_conntrack_init_end(void)
 {
-       /* For use by REJECT target */
-       RCU_INIT_POINTER(ip_ct_attach, nf_conntrack_attach);
        RCU_INIT_POINTER(nf_ct_hook, &nf_conntrack_hook);
 }