netfilter: restore NF_INET_NUMHOOKS
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 14 Oct 2020 19:34:32 +0000 (21:34 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 15 Oct 2020 03:28:05 +0000 (20:28 -0700)
This definition is used by the iptables legacy UAPI, restore it.

Fixes: d3519cb89f6d ("netfilter: nf_tables: add inet ingress support")
Reported-by: Jason A. Donenfeld <Jason@zx2c4.com>
Tested-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/netfilter/nf_tables.h
include/uapi/linux/netfilter.h
net/netfilter/nf_tables_api.c

index 3965ce18226f386906aedb8dc54169cd9fc616ea..3f7e56b1171ef246d3160732baa17bf4bcb532f4 100644 (file)
@@ -14,6 +14,8 @@
 #include <net/netlink.h>
 #include <net/flow_offload.h>
 
+#define NFT_MAX_HOOKS  (NF_INET_INGRESS + 1)
+
 struct module;
 
 #define NFT_JUMP_STACK_SIZE    16
@@ -979,7 +981,7 @@ struct nft_chain_type {
        int                             family;
        struct module                   *owner;
        unsigned int                    hook_mask;
-       nf_hookfn                       *hooks[NF_MAX_HOOKS];
+       nf_hookfn                       *hooks[NFT_MAX_HOOKS];
        int                             (*ops_register)(struct net *net, const struct nf_hook_ops *ops);
        void                            (*ops_unregister)(struct net *net, const struct nf_hook_ops *ops);
 };
index 6a6179af0d7ca1406e35024d4cad45b613eadb12..ef9a44286e23d5efab2a5add0b1178422c16e20b 100644 (file)
@@ -45,8 +45,8 @@ enum nf_inet_hooks {
        NF_INET_FORWARD,
        NF_INET_LOCAL_OUT,
        NF_INET_POST_ROUTING,
-       NF_INET_INGRESS,
-       NF_INET_NUMHOOKS
+       NF_INET_NUMHOOKS,
+       NF_INET_INGRESS = NF_INET_NUMHOOKS,
 };
 
 enum nf_dev_hooks {
index f22ad21d02301df832a8183a4d193da1ecf9736b..7f1c184c00d277f5232f41987e7642849ffbe5f5 100644 (file)
@@ -1864,7 +1864,7 @@ static int nft_chain_parse_hook(struct net *net,
                if (IS_ERR(type))
                        return PTR_ERR(type);
        }
-       if (hook->num > NF_MAX_HOOKS || !(type->hook_mask & (1 << hook->num)))
+       if (hook->num >= NFT_MAX_HOOKS || !(type->hook_mask & (1 << hook->num)))
                return -EOPNOTSUPP;
 
        if (type->type == NFT_CHAIN_T_NAT &&