netfilter: nf_tables: relax NFTA_SET_ELEM_KEY_END set flags requirements
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 17 Oct 2022 12:12:58 +0000 (14:12 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Oct 2022 06:46:48 +0000 (08:46 +0200)
Otherwise EINVAL is bogusly reported to userspace when deleting a set
element. NFTA_SET_ELEM_KEY_END does not need to be set in case of:

- insertion: if not present, start key is used as end key.
- deletion: only start key needs to be specified, end key is ignored.

Hence, relax the sanity check.

Fixes: 88cccd908d51 ("netfilter: nf_tables: NFTA_SET_ELEM_KEY_END requires concat and interval flags")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index a0653a8..58d9cbc 100644 (file)
@@ -5865,8 +5865,9 @@ static bool nft_setelem_valid_key_end(const struct nft_set *set,
                          (NFT_SET_CONCAT | NFT_SET_INTERVAL)) {
                if (flags & NFT_SET_ELEM_INTERVAL_END)
                        return false;
-               if (!nla[NFTA_SET_ELEM_KEY_END] &&
-                   !(flags & NFT_SET_ELEM_CATCHALL))
+
+               if (nla[NFTA_SET_ELEM_KEY_END] &&
+                   flags & NFT_SET_ELEM_CATCHALL)
                        return false;
        } else {
                if (nla[NFTA_SET_ELEM_KEY_END])