diff options
author | Florian Westphal <fw@strlen.de> | 2019-08-29 16:09:04 +0200 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2019-09-06 16:25:57 +0200 |
commit | 648cc618975ec27df2920cf2fa9841ba76cf21d0 (patch) | |
tree | 66bb3f1d085819d2d0c6123fcc25a9ee0e9442aa /src/evaluate.c | |
parent | 0518ea3f70d8cb508dfafc5f181e588b7acbc1dc (diff) |
src: evaluate: catch invalid 'meta day' values in eval step
Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r-- | src/evaluate.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index 8d5f5f80..b8bcf486 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1863,11 +1863,20 @@ static int expr_evaluate_meta(struct eval_ctx *ctx, struct expr **exprp) { struct expr *meta = *exprp; - if (ctx->pctx.family != NFPROTO_INET && - meta->flags & EXPR_F_PROTOCOL && - meta->meta.key == NFT_META_NFPROTO) - return expr_error(ctx->msgs, meta, + switch (meta->meta.key) { + case NFT_META_NFPROTO: + if (ctx->pctx.family != NFPROTO_INET && + meta->flags & EXPR_F_PROTOCOL) + return expr_error(ctx->msgs, meta, "meta nfproto is only useful in the inet family"); + break; + case NFT_META_TIME_DAY: + __expr_set_context(&ctx->ectx, meta->dtype, meta->byteorder, + meta->len, 6); + return 0; + default: + break; + } return expr_evaluate_primary(ctx, exprp); } |