netfilter: nf_tables: validate NFTA_SET_ELEM_OBJREF based on NFT_SET_OBJECT flag
If the NFTA_SET_ELEM_OBJREF netlink attribute is present and
NFT_SET_OBJECT flag is set on, report EINVAL.
Move existing sanity check earlier to validate that NFT_SET_OBJECT
requires NFTA_SET_ELEM_OBJREF.
Fixes: 8aeff920dc
("netfilter: nf_tables: add stateful object reference to set elements")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
271c5ca826
commit
5a2f3dc318
@ -5894,6 +5894,15 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (set->flags & NFT_SET_OBJECT) {
|
||||
if (!nla[NFTA_SET_ELEM_OBJREF] &&
|
||||
!(flags & NFT_SET_ELEM_INTERVAL_END))
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (nla[NFTA_SET_ELEM_OBJREF])
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((flags & NFT_SET_ELEM_INTERVAL_END) &&
|
||||
(nla[NFTA_SET_ELEM_DATA] ||
|
||||
nla[NFTA_SET_ELEM_OBJREF] ||
|
||||
@ -6032,10 +6041,6 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
|
||||
}
|
||||
|
||||
if (nla[NFTA_SET_ELEM_OBJREF] != NULL) {
|
||||
if (!(set->flags & NFT_SET_OBJECT)) {
|
||||
err = -EINVAL;
|
||||
goto err_parse_key_end;
|
||||
}
|
||||
obj = nft_obj_lookup(ctx->net, ctx->table,
|
||||
nla[NFTA_SET_ELEM_OBJREF],
|
||||
set->objtype, genmask);
|
||||
|
Loading…
Reference in New Issue
Block a user