SEGV in nm-applet 0.7



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"));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]