net/sfc: fix double free on encap transfer flow rule path

Don't free the outer match spec by its pointer in the parsing context
if it has already been tracked by an entry in the outer rule registry.

Fixes: dadff13793 ("net/sfc: support encap flow items in transfer rules")

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
This commit is contained in:
Ivan Malov 2020-11-16 22:23:03 +03:00 committed by Ferruh Yigit
parent aba2af9936
commit 450b53f3f2

View File

@ -1607,6 +1607,9 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa,
} }
} }
/* The spec has now been tracked by the outer rule entry. */
ctx->match_spec_outer = NULL;
/* /*
* Depending on whether we reuse an existing outer rule or create a * Depending on whether we reuse an existing outer rule or create a
* new one (see above), outer rule ID is either a valid value or * new one (see above), outer rule ID is either a valid value or
@ -1717,7 +1720,8 @@ sfc_mae_rule_encap_parse_fini(struct sfc_adapter *sa,
if (ctx->encap_type == EFX_TUNNEL_PROTOCOL_NONE) if (ctx->encap_type == EFX_TUNNEL_PROTOCOL_NONE)
return; return;
efx_mae_match_spec_fini(sa->nic, ctx->match_spec_outer); if (ctx->match_spec_outer != NULL)
efx_mae_match_spec_fini(sa->nic, ctx->match_spec_outer);
} }
int int