diff options
author | Tomasz Bursztyka <tomasz.bursztyka@nokia.com> | 2011-01-10 12:16:23 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-01-10 11:43:55 +0100 |
commit | 48de4396d54100e9b91cf84b903a72af1d3c9dc3 (patch) | |
tree | 58d61eb7e89834194ac5e0e1d8f9a8c77465960d | |
parent | 8426e2974fb672f9f5651cd7d4aec6581aa76304 (diff) | |
download | connman-48de4396d54100e9b91cf84b903a72af1d3c9dc3.tar.gz connman-48de4396d54100e9b91cf84b903a72af1d3c9dc3.tar.bz2 connman-48de4396d54100e9b91cf84b903a72af1d3c9dc3.zip |
wifi: Stack based crash risk fixed
-rw-r--r-- | gsupplicant/supplicant.c | 2 | ||||
-rw-r--r-- | plugins/wifi.c | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index e7c9f88a..cbbe95c0 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -2149,6 +2149,7 @@ static void interface_select_network_result(const char *error, SUPPLICANT_DBG(""); + g_free(data->ssid); dbus_free(data); } @@ -2191,6 +2192,7 @@ static void interface_add_network_result(const char *error, error: g_free(interface->network_path); interface->network_path = NULL; + g_free(data->ssid); g_free(data); } diff --git a/plugins/wifi.c b/plugins/wifi.c index 62d9216b..040d2f92 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -645,7 +645,7 @@ static int network_connect(struct connman_network *network) struct connman_device *device = connman_network_get_device(network); struct wifi_data *wifi; GSupplicantInterface *interface; - GSupplicantSSID ssid; + GSupplicantSSID *ssid; DBG("network %p", network); @@ -656,16 +656,20 @@ static int network_connect(struct connman_network *network) if (wifi == NULL) return -ENODEV; + ssid = g_try_malloc0(sizeof(GSupplicantSSID)); + if (ssid == NULL) + return -ENOMEM; + interface = wifi->interface; - ssid_init(&ssid, network); + ssid_init(ssid, network); if (wifi->disconnecting == TRUE) wifi->pending_network = connman_network_ref(network); else { wifi->network = connman_network_ref(network); - return g_supplicant_interface_connect(interface, &ssid, + return g_supplicant_interface_connect(interface, ssid, connect_callback, NULL); } |