From 421e049bb998963b1c0e5d34b76f731db8c257ea Mon Sep 17 00:00:00 2001 From: Benoît Ganne Date: Tue, 20 Oct 2020 14:07:55 +0200 Subject: nat: fix nat64 disable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - we should not copy and iterate over the pool underlying vector, as slots can be freed (ie in the freelist). - delete interface instead of adding them again - fix the log message Type: fix Change-Id: If0a7a2f475b4f40793eb29ea80a9d29fe5d1bcb9 Signed-off-by: Benoît Ganne --- src/plugins/nat/nat64/nat64.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/plugins/nat/nat64') diff --git a/src/plugins/nat/nat64/nat64.c b/src/plugins/nat/nat64/nat64.c index 30142a70048..240f3ef0fba 100644 --- a/src/plugins/nat/nat64/nat64.c +++ b/src/plugins/nat/nat64/nat64.c @@ -1557,7 +1557,7 @@ nat64_plugin_disable () int rv = 0; nat64_address_t *a; - nat64_interface_t *i, *interfaces; + nat64_interface_t *i, *interfaces = 0; if (plugin_enabled () == 0) { @@ -1566,16 +1566,21 @@ nat64_plugin_disable () } nm->enabled = 0; - interfaces = vec_dup (nm->interfaces); + /* *INDENT-OFF* */ + pool_foreach (i, nm->interfaces, + ({ + vec_add1 (interfaces, *i); + })); + /* *INDENT-ON* */ vec_foreach (i, interfaces) { - rv = nat64_interface_add_del (i->sw_if_index, i->flags, 1); + rv = nat64_interface_add_del (i->sw_if_index, i->flags, 0); if (rv) { nat64_log_err ("%U %s interface del failed", - unformat_vnet_sw_interface, + format_vnet_sw_if_index_name, vnm, i->sw_if_index, i->flags & NAT64_INTERFACE_FLAG_IS_INSIDE ? - "inside" : "outside", vnm, i->sw_if_index); + "inside" : "outside"); } } vec_free (interfaces); -- cgit 1.2.3-korg