diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-03-27 17:43:05 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-03-30 02:05:38 +0200 |
commit | 8548bde9890fd0316f49d3c6937573c18261f68f (patch) | |
tree | d295e2483fb2e366cd75777d447e165f25096ca6 /net | |
parent | netfilter: nft_set_bitmap: initialize set element extension in lookups (diff) | |
download | linux-8548bde9890fd0316f49d3c6937573c18261f68f.tar.xz linux-8548bde9890fd0316f49d3c6937573c18261f68f.zip |
netfilter: nft_dynset: validate set expression definition
If the global set expression definition mismatches the dynset
expression, then bail out.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nft_dynset.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/netfilter/nft_dynset.c b/net/netfilter/nft_dynset.c index d1b64c8de585..64ca13a1885b 100644 --- a/net/netfilter/nft_dynset.c +++ b/net/netfilter/nft_dynset.c @@ -187,6 +187,11 @@ static int nft_dynset_init(const struct nft_ctx *ctx, tb[NFTA_DYNSET_EXPR]); if (IS_ERR(priv->expr)) return PTR_ERR(priv->expr); + + if (set->expr && set->expr->ops != priv->expr->ops) { + err = -EOPNOTSUPP; + goto err_expr_free; + } } nft_set_ext_prepare(&priv->tmpl); @@ -205,7 +210,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx, err = nf_tables_bind_set(ctx, set, &priv->binding); if (err < 0) - goto err1; + goto err_expr_free; if (set->size == 0) set->size = 0xffff; @@ -213,7 +218,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx, priv->set = set; return 0; -err1: +err_expr_free: if (priv->expr != NULL) nft_expr_destroy(ctx, priv->expr); return err; |