NetworkManager/src
Beniamino Galvani 69fd96118e manager: unexport VPN connections when the activation fails early
When a VPN connection can't be activated we have to unexport and
dispose it. Commit f2182fbf9b ("core: don't emit double
PropertiesChanged signal for new active connections") removed the call
to nm_exported_object_unexport() in case of failure because the active
connection already gets unreferenced on failure.

However, an exported object can't be disposed until it's explicitly
unexported because GDBus code keeps a reference to it. The result was
that the active connection was kept alive and exported, but without
explicit references to it. As soon as the connection was unexported,
it was also automatically disposed, causing issues like:

 (src/nm-exported-object.c:1025):dispose: code should not be reached

 #0   _g_log_abort () at /lib64/libglib-2.0.so.0
 #1   g_logv () at /lib64/libglib-2.0.so.0
 #2   g_log () at /lib64/libglib-2.0.so.0
 #3   g_warn_message () at /lib64/libglib-2.0.so.0
 #4   dispose (object=0xaaf110) at src/nm-exported-object.c:1025
 #5   dispose (object=0xaaf110) at src/nm-active-connection.c:1246
 #6   dispose (object=0xaaf110) at src/vpn/nm-vpn-connection.c:2642
 #7   g_object_unref () at /lib64/libgobject-2.0.so.0
 #8   registration_data_free () at /lib64/libgio-2.0.so.0
 #9   g_hash_table_remove_internal () at /lib64/libglib-2.0.so.0
 #10  g_dbus_object_manager_server_unexport_unlocked () at /lib64/libgio-2.0.so.0
 #11  g_dbus_object_manager_server_unexport () at /lib64/libgio-2.0.so.0
 #12  nm_bus_manager_unregister_object (self=0x9069e0, object=object@entry=0xaaf110) at src/nm-bus-manager.c:858
 #13  nm_exported_object_unexport (self=0xaaf110) at src/nm-exported-object.c:714
 #14  _settings_connection_removed (connection=<optimized out>, user_data=0xaaf110) at src/nm-active-connection.c:184
 #15  g_closure_invoke () at /lib64/libgobject-2.0.so.0
 #16  signal_emit_unlocked_R () at /lib64/libgobject-2.0.so.0
 #17  g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
 #18  g_signal_emit_by_name () at /lib64/libgobject-2.0.so.0
 #19  nm_settings_connection_signal_remove (self=self@entry=0x9e4a80, allow_reuse=allow_reuse@entry=0) at src/settings/nm-settings-connection.c:2085
 #20  do_delete (self=0x9e4a80, callback=0x58106a <con_delete_cb>, user_data=0xa84fa0) at src/settings/nm-settings-connection.c:768
 #21  do_delete (connection=0x9e4a80, callback=0x58106a <con_delete_cb>, user_data=0xa84fa0) at src/settings/plugins/keyfile/nms-keyfile-connection.c:127
 #22  nm_settings_connection_delete (self=self@entry=0x9e4a80, callback=callback@entry=0x58106a <con_delete_cb>, user_data=0xa84fa0) at src/settings/nm-settings-connection.c:694
 #23  delete_auth_cb (self=self@entry=0x9e4a80, context=context@entry=0x7fffd80131e0, subject=0x91fb40, error=<optimized out>, data=data@entry=0x0) at src/settings/nm-settings-connection.c:1879
 #24  pk_auth_cb (chain=0x7fffd00024a0, chain_error=<optimized out>, context=0x7fffd80131e0, user_data=<optimized out>) at src/settings/nm-settings-connection.c:1351
 #25  auth_chain_finish (user_data=0x7fffd00024a0) at src/nm-auth-utils.c:92
 #26  g_idle_dispatch () at /lib64/libglib-2.0.so.0

Restore the unexport upon failure to fix this.

Fixes: f2182fbf9b

https://bugzilla.redhat.com/show_bug.cgi?id=1440077
2017-04-11 20:27:48 +02:00
..
devices wifi: only attempt to set the scan MAC address when it actually changes 2017-04-11 16:39:31 +02:00
dhcp dhcp: dhclient: remove fqdn.encoded for dhclient -6 conf 2017-04-05 16:21:51 +02:00
dns logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
dnsmasq dnsmasq: use ipv4.dns and ipv4.dns-search with ipv4.method=shared 2017-03-03 13:51:05 +01:00
ndisc ndisc: log the device context 2017-03-24 12:42:09 +01:00
platform linux-platform: fix link_get_unmanaged() return value 2017-04-06 13:23:19 +02:00
ppp ppp: only request IPV6CP when IPv6 is enabled in the connection 2017-03-22 12:20:25 +01:00
settings ifcfg: don't complain if 8021x secrets are empty 2017-04-10 10:33:24 +02:00
supplicant supplicant-config: correct the uri attribute/query separator 2017-04-10 10:33:24 +02:00
systemd systemd: merge branch systemd into master 2017-04-04 12:20:51 +02:00
tests tests/general: allow error margin on comparing floats 2017-03-28 13:52:27 +02:00
vpn device: fix removal of pacrunner configurations 2017-04-07 15:15:27 +02:00
main-utils.c all: use O_CLOEXEC for file descriptors 2016-12-13 11:26:59 +01:00
main-utils.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
main.c core: make connectivity checking per-device 2017-03-28 15:26:47 +02:00
NetworkManagerUtils.c manager: simplify searching assumed connection 2017-03-16 18:27:33 +01:00
NetworkManagerUtils.h manager: simplify searching assumed connection 2017-03-16 18:27:33 +01:00
nm-act-request.c active-connection: emit a StateChanged signal on state changes 2017-03-17 10:21:19 +01:00
nm-act-request.h core: add activation-type property to active-connection 2017-03-16 18:27:33 +01:00
nm-active-connection.c active-connection: log the connection context 2017-03-24 12:42:09 +01:00
nm-active-connection.h active-connection: emit a StateChanged signal on state changes 2017-03-17 10:21:19 +01:00
nm-audit-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-audit-manager.h audit: add @args to device logging functions 2017-03-06 10:29:37 +01:00
nm-auth-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-auth-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-auth-subject.c all: use "unsigned long" instead of "long unsigned" 2017-03-14 11:23:46 +01:00
nm-auth-subject.h auth: embed private data NMAuthSubjectPrivate in NMAuthSubject struct 2016-05-12 10:24:36 +02:00
nm-auth-utils.c auth-utils: fix possibly uninitialized variables 2017-04-07 11:52:16 -05:00
nm-auth-utils.h all: move NM_AUTH_PERMISSION_* defines to "nm-common-macros.h" header 2016-06-01 19:06:35 +02:00
nm-bus-manager.c core: introduce default logging macros 2016-10-14 15:57:43 +02:00
nm-bus-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-checkpoint-manager.c build: don't add subdirectories to include search path but require qualified include 2016-11-21 14:26:37 +01:00
nm-checkpoint-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-checkpoint.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-checkpoint.h checkpoint: introduce new flags to better restore previous state 2016-10-24 09:57:18 +02:00
nm-config-data.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-config-data.h build: fix -Wignored-qualifiers warnings 2017-02-06 19:27:21 +01:00
nm-config.c config: fix assertion in nm_config_device_state_write() 2017-04-07 16:56:33 +02:00
nm-config.h core: only persist explicit managed state in device's state file 2017-04-07 15:27:04 +02:00
nm-connectivity.c core: make connectivity checking per-device 2017-03-28 15:26:47 +02:00
nm-connectivity.h core: make connectivity checking per-device 2017-03-28 15:26:47 +02:00
nm-core-utils.c tests/general: allow error margin on comparing floats 2017-03-28 13:52:27 +02:00
nm-core-utils.h shared: move NM_UTILS_LOOKUP() macro shared utils 2017-04-05 16:53:06 +02:00
nm-dcb.c build: don't add subdirectories to include search path but require qualified include 2016-11-21 14:26:37 +01:00
nm-dcb.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
nm-default-route-manager.c default-route-manager: fix possibly uninitialized variable 2017-04-07 11:33:06 -05:00
nm-default-route-manager.h default-route-manager: return whether the default route changed 2017-04-01 15:49:16 +02:00
nm-dhcp4-config.c exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
nm-dhcp4-config.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-dhcp6-config.c exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
nm-dhcp6-config.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-dispatcher.c core: make connectivity checking per-device 2017-03-28 15:26:47 +02:00
nm-dispatcher.h core/dispatcher: pass act-request to device dispatcher calls 2017-03-16 18:27:33 +01:00
nm-exported-object.c all: use "unsigned long" instead of "long unsigned" 2017-03-14 11:23:46 +01:00
nm-exported-object.h exported-object: add "path" GObject property to have notify signal 2017-01-25 13:12:08 +01:00
nm-firewall-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-firewall-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-iface-helper.c iface-helper: log the device context 2017-03-24 12:42:09 +01:00
nm-ip4-config.c core,libnm-core: use same route attribute names of iproute2 2017-03-22 12:04:25 +01:00
nm-ip4-config.h ip4-config: sort addresses only when reading the property value 2016-12-05 10:56:51 +01:00
nm-ip6-config.c core,libnm-core: use same route attribute names of iproute2 2017-03-22 12:04:25 +01:00
nm-ip6-config.h ip6-config: add nm_ip6_config_set_privacy() 2016-12-05 10:56:51 +01:00
nm-logging.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-logging.h logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-manager.c manager: unexport VPN connections when the activation fails early 2017-04-11 20:27:48 +02:00
nm-manager.h core: add activation-type property to active-connection 2017-03-16 18:27:33 +01:00
nm-multi-index.c all: modify line separator comments to be 80 chars wide 2016-10-03 12:01:15 +02:00
nm-multi-index.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
nm-pacrunner-manager.c pacrunner: remove failed and pending items from configuration list 2017-04-07 15:15:27 +02:00
nm-pacrunner-manager.h pacrunner: rework processing of configuration entries 2017-04-06 08:57:35 +02:00
nm-policy.c policy: add some verbose logging for tracking hostname management 2017-03-24 15:18:09 +01:00
nm-policy.h policy: add support to configurable hostname mode 2017-03-24 15:18:09 +01:00
nm-proxy-config.c proxy: reorder parts in nm-proxy-config.c and nm-pacrunner-manager.c 2016-10-04 11:58:32 +02:00
nm-proxy-config.h proxy: remove unnecessary APIs 2016-10-04 11:44:44 +02:00
nm-rfkill-manager.c udev: drop libgudev in favor of libudev 2017-03-22 12:41:06 +01:00
nm-rfkill-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-route-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-route-manager.h route-manager: emit a signal when IPv4 routes change 2017-03-22 12:21:39 +01:00
nm-session-monitor.c session: make systemd-logind and elogind conflicting build options 2017-02-24 13:06:13 +01:00
nm-session-monitor.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-sleep-monitor.c session: make systemd-logind and elogind conflicting build options 2017-02-24 13:06:13 +01:00
nm-sleep-monitor.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-test-utils-core.h all: use "unsigned long" instead of "long unsigned" 2017-03-14 11:23:46 +01:00
nm-types.h core: track external activations types in the active-connection 2017-03-16 18:27:33 +01:00
org.freedesktop.NetworkManager.conf dns: use DBus to make dnsmasq nameserver changes 2016-04-21 15:32:07 +02:00