If a transaction is rejected by the kernel (for instance due to a
semantic error), cache contents are potentially invalid. Release the
cache in that case to avoid the inconsistency.
The problem is easy to reproduce in an interactive session:
| nft> list ruleset
| table ip t {
| chain c {
| }
| }
| nft> flush ruleset; add rule ip t c accept
| Error: No such file or directory
| flush ruleset; add rule ip t c accept
| ^
| nft> list ruleset
| nft>
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
nft_output_json(&nft->output) &&
nft_output_echo(&nft->output))
json_print_echo(nft);
+ if (rc)
+ cache_release(&nft->cache);
return rc;
}
nft_output_json(&nft->output) &&
nft_output_echo(&nft->output))
json_print_echo(nft);
+ if (rc)
+ cache_release(&nft->cache);
return rc;
}