From af22afbaf54aaadb85d6df5d60c5b43f37ea5fc0 Mon Sep 17 00:00:00 2001 From: Patrik Flykt Date: Thu, 28 Jun 2012 10:11:03 +0300 Subject: wifi: Add wifi pointer NULL checks Always check what connman_device_get_data() returns and act accordingly. --- plugins/wifi.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/wifi.c b/plugins/wifi.c index f1ee6da0..06604d53 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -134,6 +134,9 @@ static void wifi_newlink(unsigned flags, unsigned change, void *user_data) struct connman_device *device = user_data; struct wifi_data *wifi = connman_device_get_data(device); + if (wifi == NULL) + return; + DBG("index %d flags %d change %d", wifi->index, flags, change); if (!change) @@ -402,6 +405,9 @@ static int throw_wifi_scan(struct connman_device *device, struct wifi_data *wifi = connman_device_get_data(device); int ret; + if (wifi == NULL) + return -ENODEV; + DBG("device %p %p", device, wifi->interface); if (wifi->tethering == TRUE) @@ -438,7 +444,7 @@ static void scan_callback(int result, GSupplicantInterface *interface, struct connman_device *device = user_data; struct wifi_data *wifi = connman_device_get_data(device); - DBG("result %d", result); + DBG("result %d wifi %p", result, wifi); if (wifi != NULL && wifi->hidden != NULL) { connman_network_clear_hidden(wifi->hidden->user_data); @@ -461,7 +467,10 @@ static void scan_callback_hidden(int result, struct wifi_data *wifi = connman_device_get_data(device); int driver_max_ssids; - DBG("result %d", result); + DBG("result %d wifi %p", result, wifi); + + if (wifi == NULL) + goto out; /* * Scan hidden networks so that we can autoconnect to them. @@ -639,6 +648,9 @@ static int wifi_enable(struct connman_device *device) DBG("device %p %p", device, wifi); + if (wifi == NULL) + return -ENODEV; + ret = g_supplicant_interface_create(interface, driver, NULL, interface_create_callback, wifi); @@ -653,7 +665,10 @@ static int wifi_disable(struct connman_device *device) struct wifi_data *wifi = connman_device_get_data(device); int ret; - DBG("device %p", device); + DBG("device %p wifi %p", device, wifi); + + if (wifi == NULL) + return -ENODEV; wifi->connected = FALSE; wifi->disconnecting = FALSE; @@ -821,6 +836,9 @@ static int wifi_scan_fast(struct connman_device *device) int ret; int driver_max_ssids = 0; + if (wifi == NULL) + return -ENODEV; + DBG("device %p %p", device, wifi->interface); if (wifi->tethering == TRUE) @@ -875,6 +893,9 @@ static int wifi_scan_hidden(struct connman_device *device, struct hidden_params *hidden; int ret; + if (wifi == NULL) + return -ENODEV; + DBG("hidden SSID %s", ssid); if (wifi->tethering == TRUE || wifi->hidden != NULL) -- cgit v1.2.3