Re: [PATCH nft] evaluate: force full cache update on rule index translation

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

 



On Wed, May 01, 2019 at 12:35:10PM -0400, Eric Garver wrote:
> If we've done a partial fetch of the cache and the genid is the same the
> cache update will be skipped without fetching the rules. This causes the
> index to handle lookup to fail. To remedy the situation we flush the
> cache and force a full update.

@Eric: Would you mind to post a reproducer? I'd like to make a test
for tests/shell/ infrastructure to make sure future changes don't
break this.

@Phil: Not related to this, but do you think it would be good to
rework rule index insertion to support for NFTA_RULE_POSITION_ID?

Thanks!

> Fixes: 816d8c7659c1 ("Support 'add/insert rule index <IDX>'")
> Signed-off-by: Eric Garver <eric@xxxxxxxxxxx>
> ---
>  src/evaluate.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/src/evaluate.c b/src/evaluate.c
> index 3593eb80a6a6..a2585291e7c4 100644
> --- a/src/evaluate.c
> +++ b/src/evaluate.c
> @@ -3182,7 +3182,11 @@ static int rule_translate_index(struct eval_ctx *ctx, struct rule *rule)
>  	struct rule *r;
>  	int ret;
>  
> -	/* update cache with CMD_LIST so that rules are fetched, too */
> +	/* Update cache with CMD_LIST so that rules are fetched, too. The explicit
> +	 * release is necessary because the genid may be the same, in which case
> +	 * the update would be a no-op.
> +	 */
> +	cache_release(&ctx->nft->cache);
>  	ret = cache_update(ctx->nft, CMD_LIST, ctx->msgs);
>  	if (ret < 0)
>  		return ret;
> -- 
> 2.20.1
> 



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

  Powered by Linux