Re: [nft PATCH] evaluate: Reject set references in mapping LHS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 31, 2019 at 07:21:24PM +0100, Phil Sutter wrote:
> This wasn't explicitly caught before causing a program abort:
> 
> | BUG: invalid range expression type set reference
> | nft: expression.c:1162: range_expr_value_low: Assertion `0' failed.
> | zsh: abort      sudo ./install/sbin/nft add rule t c meta mark set tcp dport map '{ @s : 23 }
> 
> With this patch in place, the error message is way more descriptive:
> 
> | Error: Key can't be set reference
> | add rule t c meta mark set tcp dport map { @s : 23 }
> |                                            ^^

I wanted to check why the parser allow for this...

> Signed-off-by: Phil Sutter <phil@xxxxxx>
> ---
>  src/evaluate.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/src/evaluate.c b/src/evaluate.c
> index 81230fc7f4be4..500780aeae243 100644
> --- a/src/evaluate.c
> +++ b/src/evaluate.c
> @@ -1456,6 +1456,10 @@ static int expr_evaluate_mapping(struct eval_ctx *ctx, struct expr **expr)
>  	if (!expr_is_constant(mapping->left))
>  		return expr_error(ctx->msgs, mapping->left,
>  				  "Key must be a constant");
> +	if (mapping->left->etype == EXPR_SET_ELEM &&
> +	    mapping->left->key->etype == EXPR_SET_REF)
> +		return expr_error(ctx->msgs, mapping->left,
> +				  "Key can't be set reference");
>  	mapping->flags |= mapping->left->flags & EXPR_F_SINGLETON;
>  
>  	expr_set_context(&ctx->ectx, set->datatype, set->datalen);
> -- 
> 2.23.0
> 



[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux