mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
netfilter: nf_tables: validate NFTA_SET_ELEM_OBJREF based on NFT_SET_OBJECT flag
commit5a2f3dc318upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8d2fe4b9ed
commit
01b0cae6b7
|
|
@ -5245,6 +5245,15 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
|
||||||
return -EINVAL;
|
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) &&
|
if ((flags & NFT_SET_ELEM_INTERVAL_END) &&
|
||||||
(nla[NFTA_SET_ELEM_DATA] ||
|
(nla[NFTA_SET_ELEM_DATA] ||
|
||||||
nla[NFTA_SET_ELEM_OBJREF] ||
|
nla[NFTA_SET_ELEM_OBJREF] ||
|
||||||
|
|
@ -5322,10 +5331,6 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
|
||||||
expr->ops->size);
|
expr->ops->size);
|
||||||
|
|
||||||
if (nla[NFTA_SET_ELEM_OBJREF] != NULL) {
|
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,
|
obj = nft_obj_lookup(ctx->net, ctx->table,
|
||||||
nla[NFTA_SET_ELEM_OBJREF],
|
nla[NFTA_SET_ELEM_OBJREF],
|
||||||
set->objtype, genmask);
|
set->objtype, genmask);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user