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
This commit is contained in:
Rui Matos 2015-05-27 16:45:03 +02:00
parent 3b283b78b0
commit c42f7d2d91
3 changed files with 6 additions and 6 deletions

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}