Today I upgraded my new laptop from Ubuntu 8.04 to 8.10alpha4 to try out the new NetworkManager stuff. Unfortunately it SEGV'd whenever trying to connect to my WPA network.

I traced it to this function, which was being called (at least) twice for the same connection, and re-using freed pointers the second time around.

A better fix would just eliminate the redundant call. (Why is it being called multiple times in the first place?)
--
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/
Index: src/wireless-security/wireless-security.c
===================================================================
--- src/wireless-security/wireless-security.c   (revision 865)
+++ src/wireless-security/wireless-security.c   (working copy)
@@ -176,18 +176,21 @@
        // FIXME: allow protocol selection and filter on device capabilities
        g_slist_foreach (s_wireless_sec->proto, (GFunc) g_free, NULL);
        g_slist_free (s_wireless_sec->proto);
+       s_wireless_sec->proto = NULL;
        s_wireless_sec->proto = g_slist_append (s_wireless_sec->proto, g_strdup 
("wpa"));
        s_wireless_sec->proto = g_slist_append (s_wireless_sec->proto, g_strdup 
("rsn"));
 
        // FIXME: allow pairwise cipher selection and filter on device 
capabilities
        g_slist_foreach (s_wireless_sec->pairwise, (GFunc) g_free, NULL);
        g_slist_free (s_wireless_sec->pairwise);
+       s_wireless_sec->pairwise = NULL;
        s_wireless_sec->pairwise = g_slist_append (s_wireless_sec->pairwise, 
g_strdup ("tkip"));
        s_wireless_sec->pairwise = g_slist_append (s_wireless_sec->pairwise, 
g_strdup ("ccmp"));
 
        // FIXME: allow group cipher selection and filter on device capabilities
        g_slist_foreach (s_wireless_sec->group, (GFunc) g_free, NULL);
        g_slist_free (s_wireless_sec->group);
+       s_wireless_sec->group = NULL;
        s_wireless_sec->group = g_slist_append (s_wireless_sec->group, g_strdup 
("wep40"));
        s_wireless_sec->group = g_slist_append (s_wireless_sec->group, g_strdup 
("wep104"));
        s_wireless_sec->group = g_slist_append (s_wireless_sec->group, g_strdup 
("tkip"));
_______________________________________________
NetworkManager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to