FAILED: patch "[PATCH] netfilter: nf_tables: NFTA_SET_ELEM_KEY_END requires concat" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 88cccd908d51397f9754f89a937cd13fa59dee37 Mon Sep 17 00:00:00 2001
From: Pablo Neira Ayuso <[email protected]>
Date: Fri, 12 Aug 2022 16:21:28 +0200
Subject: [PATCH] netfilter: nf_tables: NFTA_SET_ELEM_KEY_END requires concat
and interval flags
If the NFT_SET_CONCAT|NFT_SET_INTERVAL flags are set on, then the netlink attribute NFTA_SET_ELEM_KEY_END must be specified. Otherwise, NFTA_SET_ELEM_KEY_END should not be present.
For catch-all element, NFTA_SET_ELEM_KEY_END should not be present. The NFT_SET_ELEM_INTERVAL_END is never used with this set flags combination.
net/netfilter/nf_tables_api.c +24 -0
@@ -5844,6 +5844,24 @@ static void nft_setelem_remove(const struct net *net, set->ops->remove (net, set, elem); } +static bool nft_setelem_valid_key_end (const struct nft_set *set, +struct nlattr **nla,u32 flags) +{ +if ((set->flags & (NFT_SET_CONCAT |NFT_SET_INTERVAL )) == + (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 )) +return false; + }else { +if (nla[NFTA_SET_ELEM_KEY_END ]) +return false; + } + +return true; +} +static int nft_add_set_elem (struct nft_ctx *ctx,struct nft_set *set,const struct nlattr *attr,u32 nlmsg_flags) {
@@ -5903,6 +5921,9 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,return -EINVAL ; } +if (!nft_setelem_valid_key_end (set, nla, flags)) +return -EINVAL ; + if ((flags & NFT_SET_ELEM_INTERVAL_END) && (nla[NFTA_SET_ELEM_DATA] || nla[NFTA_SET_ELEM_OBJREF] ||
@@ -6333,6 +6354,9 @@ static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,if (!nla[NFTA_SET_ELEM_KEY ] && !(flags &NFT_SET_ELEM_CATCHALL ))return -EINVAL ; +if (!nft_setelem_valid_key_end (set, nla, flags)) +return -EINVAL ; +nft_set_ext_prepare (&tmpl);if (flags !=0 ) {