Hi, On 7/16/19 8:12 PM, Pablo Neira Ayuso wrote: > On Tue, Jul 16, 2019 at 08:00:04PM +0200, Florian Westphal wrote: >> Fernando Fernandez Mancera <ffmanc...@riseup.net> wrote: >>> El 16 de julio de 2019 18:47:11 CEST, Phil Sutter <p...@nwl.cc> escribió: >>>> Hi Pablo, >>>> >>>> On Tue, Jul 16, 2019 at 01:51:20PM +0200, Pablo Neira Ayuso wrote: >>>> [...] >>>>> diff --git a/src/evaluate.c b/src/evaluate.c >>>>> index f95f42e1067a..cd566e856a11 100644 >>>>> --- a/src/evaluate.c >>>>> +++ b/src/evaluate.c >>>>> @@ -1984,17 +1984,9 @@ static int stmt_evaluate_verdict(struct >>>> eval_ctx *ctx, struct stmt *stmt) >>>>> case EXPR_VERDICT: >>>>> if (stmt->expr->verdict != NFT_CONTINUE) >>>>> stmt->flags |= STMT_F_TERMINAL; >>>>> - if (stmt->expr->chain != NULL) { >>>>> - if (expr_evaluate(ctx, &stmt->expr->chain) < 0) >>>>> - return -1; >>>>> - if ((stmt->expr->chain->etype != EXPR_SYMBOL && >>>>> - stmt->expr->chain->etype != EXPR_VALUE) || >>>>> - stmt->expr->chain->symtype != SYMBOL_VALUE) { >>>>> - return stmt_error(ctx, stmt, >>>>> - "invalid verdict chain >>>>> expression %s\n", >>>>> - expr_name(stmt->expr->chain)); >>>>> - } >>>>> - } >>>> >>>> According to my logs, this bit was added by Fernando to cover for >>>> invalid variable values[1]. So I fear we can't just drop this check. >>>> >>>> Cheers, Phil >>>> >>>> [1] I didn't check with current sources, but back then the following >>>> variable contents were problematic: >>>> >>>> * define foo = @set1 (a set named 'set1' must exist) >>>> * define foo = { 1024 } >>>> * define foo = * >>> >>> Yes I am looking to the report and why current version fails when the jump >>> is to a non-base chain because I tested that some months ago. >>> >>> I will catch up with more details in a few hours. Sorry for the >>> inconveniences. >> >> Fernando, in case Pablos patch v2 fixes the reported bug, could you >> followup with a test case? It would help when someone tries to remove >> "unneeded code" in the future ;-)
I have been taking a look to the shell tests and we already have some tests that cover these cases "tests/shell/testcases/chains/0001jumps_0", "tests/shell/testcases/nft-f/0018jump_variable_0", "tests/shell/testcases/nft-f/0019jump_variable_1", "tests/shell/testcases/nft-f/0020jump_variable_1". Also I have tested Pablo's v2 patch and it works fine for me. I would like to know how could I prevent this kind of situations in the future. Is there a way to automatically test your patch with other relevant kernel versions? Thanks! :-) > > I'm not sure it's worth a test for this unlikely corner case. > > There are thousands of paths where we're not performing strict > expression validation as in this case... and if you really want to get > this right. >