from what i can see we have:

static void
nm_supplicant_info_set_call (NMSupplicantInfo *info, DBusGProxyCall *call)
{
        if (call) {
                nm_call_store_add (info->store, G_OBJECT (info->proxy), 
(gpointer) call);
                info->call = call;
        }
}


which overwrites any preexisting info->call without cancelling any previously 
added still running call. In consequence calls already running won't be 
cancelled on destroy of NMSupplicantInfo.

This eventually causes a callback bumping into on the freed
NMSupplicantInfo and crashes, e.g.

#11 0xb7e40e41 in _dbus_pending_call_complete (pending=0x81ef5d0) at 
dbus-pending-call.c:198
        user_data = (void *) 0x40

Solution might be to use a GSList *calls in SupplicantInfo to track the
calls and cancel all in nm_supplicant_info_destroy.

** Changed in: network-manager (Ubuntu)
       Status: New => Triaged

** Visibility changed to: Public

** Summary changed:

- NetworkManager crashed with SIGSEGV in g_str_hash()
+ MASTER NetworkManager crashed with SIGSEGV in g_str_hash()

** Changed in: network-manager (Ubuntu)
   Importance: Medium => High

-- 
MASTER NetworkManager crashed with SIGSEGV in g_str_hash()
https://bugs.launchpad.net/bugs/263392
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to