From 011dd919fa6f6923a0d1f9596283578caaf8a88c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 14 Sep 2018 11:53:27 +0200 Subject: [PATCH] vpn: fix assertion during "SecretsRequired" in unexpected state Got this assertion: NetworkManager[12939]: [1536917977.4868] active-connection[0x563d8fd34540]: set state deactivated (was deactivating) ... NetworkManager[12939]: nm-openvpn[1106] openvpn[1132]: send SIGTERM NetworkManager[12939]: nm-openvpn[1106] wait for 1 openvpn processes to terminate... NetworkManager[12939]: nm-openvpn[1106] openvpn[1132] exited with error code 1 NetworkManager[12939]: [1536917977.5035] vpn-connection[0x563d8fd34540,2fdeaea3-975f-4325-8305-83ebca5eaa26,"my-openvpn-Red-Hat",0]: VPN plugin: requested secrets; state disconnected (9) NetworkManager[12939]: plugin_interactive_secrets_required: assertion 'priv->vpn_state == STATE_CONNECT || priv->vpn_state == STATE_NEED_AUTH' failed Meaning. We should either ensure that secrets_required_cb() signal callback is disconnected from proxy's signal, or we gracefully handle callbacks at unexpected moments. Do the latter. (cherry picked from commit 92344dd0848f2353b81eab5b0b294eb92aaf59c0) --- src/vpn/nm-vpn-connection.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vpn/nm-vpn-connection.c b/src/vpn/nm-vpn-connection.c index d1aaa7c99..3a866200c 100644 --- a/src/vpn/nm-vpn-connection.c +++ b/src/vpn/nm-vpn-connection.c @@ -2684,12 +2684,16 @@ plugin_interactive_secrets_required (NMVpnConnection *self, gs_free const char **hints = NULL; gs_free char *message_hint = NULL; + if (!NM_IN_SET (priv->vpn_state, STATE_CONNECT, + STATE_NEED_AUTH)) { + _LOGD ("VPN plugin: requested secrets; state %s (%d); ignore request in current state", + vpn_state_to_string (priv->vpn_state), priv->vpn_state); + return; + } + _LOGI ("VPN plugin: requested secrets; state %s (%d)", vpn_state_to_string (priv->vpn_state), priv->vpn_state); - g_return_if_fail (priv->vpn_state == STATE_CONNECT || - priv->vpn_state == STATE_NEED_AUTH); - priv->secrets_idx = SECRETS_REQ_INTERACTIVE; _set_vpn_state (self, STATE_NEED_AUTH, NM_ACTIVE_CONNECTION_STATE_REASON_NONE, FALSE);