From 51988f5a41f10696cee74d6f9ff5f92d14baa60b Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Wed, 27 May 2015 16:45:03 +0200 Subject: [PATCH] network: Prevent a use after free crash when removing virtual devices When a virtual device is removed and the instance gets finalized we're not disconnecting from the real NMDevice's notify signal and thus end up crashing when the signal fires afterwards. Avoid that by using g_signal_connect_object() so that when we're finalized the disconnection happens automatically. https://bugzilla.gnome.org/show_bug.cgi?id=749972 --- panels/network/net-device-bond.c | 4 ++-- panels/network/net-device-bridge.c | 4 ++-- panels/network/net-device-team.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/panels/network/net-device-bond.c b/panels/network/net-device-bond.c index abf0829..67123ff 100644 --- a/panels/network/net-device-bond.c +++ b/panels/network/net-device-bond.c @@ -133,8 +133,8 @@ net_device_bond_device_set (NetVirtualDevice *virtual_device, { NetDeviceBond *device_bond = NET_DEVICE_BOND (virtual_device); - g_signal_connect (nm_device, "notify::slaves", - G_CALLBACK (nm_device_slaves_changed), device_bond); + g_signal_connect_object (nm_device, "notify::slaves", + G_CALLBACK (nm_device_slaves_changed), device_bond, 0); nm_device_slaves_changed (G_OBJECT (nm_device), NULL, device_bond); } diff --git a/panels/network/net-device-bridge.c b/panels/network/net-device-bridge.c index 16251e0..2335ff8 100644 --- a/panels/network/net-device-bridge.c +++ b/panels/network/net-device-bridge.c @@ -133,8 +133,8 @@ net_device_bridge_device_set (NetVirtualDevice *virtual_device, { NetDeviceBridge *device_bridge = NET_DEVICE_BRIDGE (virtual_device); - g_signal_connect (nm_device, "notify::slaves", - G_CALLBACK (nm_device_slaves_changed), device_bridge); + g_signal_connect_object (nm_device, "notify::slaves", + G_CALLBACK (nm_device_slaves_changed), device_bridge, 0); nm_device_slaves_changed (G_OBJECT (nm_device), NULL, device_bridge); } diff --git a/panels/network/net-device-team.c b/panels/network/net-device-team.c index 09a6142..55bfbca 100644 --- a/panels/network/net-device-team.c +++ b/panels/network/net-device-team.c @@ -133,8 +133,8 @@ net_device_team_device_set (NetVirtualDevice *virtual_device, { NetDeviceTeam *device_team = NET_DEVICE_TEAM (virtual_device); - g_signal_connect (nm_device, "notify::slaves", - G_CALLBACK (nm_device_slaves_changed), device_team); + g_signal_connect_object (nm_device, "notify::slaves", + G_CALLBACK (nm_device_slaves_changed), device_team, 0); nm_device_slaves_changed (G_OBJECT (nm_device), NULL, device_team); } -- 2.4.0