From 648cc618975ec27df2920cf2fa9841ba76cf21d0 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Thu, 29 Aug 2019 16:09:04 +0200 Subject: src: evaluate: catch invalid 'meta day' values in eval step Signed-off-by: Florian Westphal --- src/evaluate.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/evaluate.c') 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); } -- cgit v1.2.3