summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-07-12 20:40:02 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-07-12 20:44:32 +0200
commit4dfe58506284f87110393bb3c01bd37bed90e049 (patch)
tree02fa0e91138936a02f6c0ec0f1cf73adbe066c41
parentb65c51786893ec9defb6c8fdcd82e117ce0d91e4 (diff)
downloadconnman-4dfe58506284f87110393bb3c01bd37bed90e049.tar.gz
connman-4dfe58506284f87110393bb3c01bd37bed90e049.tar.bz2
connman-4dfe58506284f87110393bb3c01bd37bed90e049.zip
Check for add_gateway() return value before dereferencing it
add_gateway() also returns NULL for zero length strings.
-rw-r--r--src/connection.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/connection.c b/src/connection.c
index dcaa8fe1..5f31885f 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -23,6 +23,7 @@
#include <config.h>
#endif
+#include <string.h>
#include <net/if.h>
#include <gdbus.h>
@@ -101,6 +102,9 @@ static struct gateway_data *add_gateway(int index, const char *gateway)
struct gateway_data *data;
struct connman_service *service;
+ if (strlen(gateway) == 0)
+ return NULL;
+
data = g_try_new0(struct gateway_data, 1);
if (data == NULL)
return NULL;
@@ -278,14 +282,15 @@ static int connection_probe(struct connman_element *element)
active_gateway = find_active_gateway();
new_gateway = add_gateway(element->index, gateway);
+ if (new_gateway == NULL)
+ return 0;
+
service = __connman_element_get_service(element);
- if (new_gateway) {
- connman_inet_add_host_route(element->index,
- new_gateway->gateway, NULL);
- __connman_service_nameserver_add_routes(service,
- new_gateway->gateway);
- }
+ connman_inet_add_host_route(element->index,
+ new_gateway->gateway, NULL);
+ __connman_service_nameserver_add_routes(service,
+ new_gateway->gateway);
__connman_service_indicate_state(service, CONNMAN_SERVICE_STATE_READY);