]> git.ipfire.org Git - thirdparty/ipset.git/commitdiff
netfilter: propagate net to nf_bridge_get_physindev
authorPavel Tikhomirov <ptikhomirov@virtuozzo.com>
Wed, 22 May 2024 17:54:22 +0000 (19:54 +0200)
committerJozsef Kadlecsik <kadlec@netfilter.org>
Wed, 22 May 2024 17:54:22 +0000 (19:54 +0200)
This is a preparation patch for replacing physindev with physinif on
nf_bridge_info structure. We will use dev_get_by_index_rcu to resolve
device, when needed, and it requires net to be available.

Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
kernel/net/netfilter/ipset/ip_set_hash_netiface.c

index 5baa852e8177d9544f5018a870b7145d6f9f9125..293d0951f8238a4e958f2b84b6afacfee9c0014d 100644 (file)
@@ -139,10 +139,15 @@ hash_netiface4_data_next(struct hash_netiface4_elem *next,
 #include "ip_set_hash_gen.h"
 
 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
+#ifdef HAVE_NF_BRIDGE_GET_PYSINDEV_NET
+static const char *get_physindev_name(const struct sk_buff *skb, struct net *net)
+{
+       struct net_device *dev = nf_bridge_get_physindev(skb, net);
+#else
 static const char *get_physindev_name(const struct sk_buff *skb)
 {
        struct net_device *dev = nf_bridge_get_physindev(skb);
-
+#endif
        return dev ? dev->name : NULL;
 }
 
@@ -178,8 +183,13 @@ hash_netiface4_kadt(struct ip_set *set, const struct sk_buff *skb,
 
        if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
+#ifdef HAVE_NF_BRIDGE_GET_PYSINDEV_NET
+               const char *eiface = SRCDIR ? get_physindev_name(skb, xt_net(par)) :
+                                             get_physoutdev_name(skb);
+#else
                const char *eiface = SRCDIR ? get_physindev_name(skb) :
                                              get_physoutdev_name(skb);
+#endif
 
                if (!eiface)
                        return -EINVAL;
@@ -396,8 +406,13 @@ hash_netiface6_kadt(struct ip_set *set, const struct sk_buff *skb,
 
        if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
+#ifdef HAVE_NF_BRIDGE_GET_PYSINDEV_NET
+               const char *eiface = SRCDIR ? get_physindev_name(skb, xt_net(par)) :
+                                             get_physoutdev_name(skb);
+#else
                const char *eiface = SRCDIR ? get_physindev_name(skb) :
                                              get_physoutdev_name(skb);
+#endif
 
                if (!eiface)
                        return -EINVAL;