Fixed memory related issues reported by valgrind. 41/194841/1
authorNiraj Kumar Goit <niraj.g@samsung.com>
Fri, 7 Dec 2018 10:02:56 +0000 (15:32 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Fri, 7 Dec 2018 10:02:56 +0000 (15:32 +0530)
==1191== Invalid read of size 4
==1191==    at 0x4AF034C: g_variant_unref (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x49677AF: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x4A232F3: g_object_unref (in /usr/lib/libgobject-2.0.so.0.5200.2)
==1191==    by 0x4973A33: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x497555B: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x4928777: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x49287AB: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x4AB08E7: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AB0C77: ??? (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AB0FD7: g_main_loop_run (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x497389F: ??? (in /usr/lib/libgio-2.0.so.0.5200.2)
==1191==    by 0x4AD9B3B: ??? (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==  Address 0x86ac014 is 20 bytes inside a block of size 24 free'd
==1191==    at 0x4846EC8: free (vg_replace_malloc.c:530)
==1191==    by 0x113FFD: __netconfig_wifi_bssid_create_interface (wifi-bssid-scan.c:454)
==1191==    by 0x113FFD: __netconfig_wifi_bssid_scan (wifi-bssid-scan.c:486)
==1191==    by 0x113FFD: handle_request_bssid_scan (wifi-bssid-scan.c:529)
==1191==    by 0x4E45AF7: ffi_call_SYSV (in /usr/lib/libffi.so.6.0.2)
==1191==  Block was alloc'd at
==1191==    at 0x48458A4: malloc (vg_replace_malloc.c:299)
==1191==    by 0x4AB61B3: g_malloc (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4ACF4A3: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AF01EF: ??? (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AEC8E7: g_variant_builder_end (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AEE6C7: ??? (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AEE9FF: g_variant_new_va (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x4AEEAC3: g_variant_new (in /usr/lib/libglib-2.0.so.0.5200.2)
==1191==    by 0x113FB7: __netconfig_wifi_bssid_create_interface (wifi-bssid-scan.c:438)
==1191==    by 0x113FB7: __netconfig_wifi_bssid_scan (wifi-bssid-scan.c:486)
==1191==    by 0x113FB7: handle_request_bssid_scan (wifi-bssid-scan.c:529)
==1191==    by 0x4E45AF7: ffi_call_SYSV (in /usr/lib/libffi.so.6.0.2)

Change-Id: If9fa9f2a0e6e2b6f201a486d333ed153c0581b98
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
src/dbus/netsupplicant.c
src/wifi-bssid-scan.c

index a1d1445..f31e19e 100755 (executable)
@@ -116,6 +116,9 @@ gboolean netconfig_supplicant_invoke_dbus_method_nonblock(const char *dest,
                        (GAsyncReadyCallback) notify_func,
                        NULL);
 
+       if (notify_func)
+               netconfig_gdbus_pending_call_ref();
+
        return TRUE;
 }
 
index f285c52..200a671 100755 (executable)
@@ -325,14 +325,39 @@ void netconfig_wifi_bssid_signal_scanaborted(void)
        __netconfig_set_bssid_scan_mode(FALSE);
 }
 
+static void __netconfig_wifi_bssid_scan_request_reply(GObject *source_object,
+               GAsyncResult *res, gpointer user_data)
+{
+       GVariant *message;
+       GDBusConnection *conn = NULL;
+       GError *error = NULL;
+
+       conn = G_DBUS_CONNECTION(source_object);
+       message = g_dbus_connection_call_finish(conn, res, &error);
+
+       if (message == NULL) {
+               if (error != NULL) {
+                       ERR("Fail to request status [%d: %s]", error->code, error->message);
+                       g_error_free(error);
+               } else {
+                       ERR("Fail to request bssid scan");
+               }
+       } else {
+               DBG("Successfully requested bssid scan");
+               g_variant_unref(message);
+       }
+
+       netconfig_gdbus_pending_call_unref();
+}
+
 static int __netconfig_wifi_bssid_request_scan(char *if_path)
 {
-       GDBusConnection *connection = NULL;
        GVariant *message = NULL;
        GVariantBuilder *builder = NULL;
        const char *key1 = "Type";
        const char *val1 = "passive";
        gboolean is_free_required = FALSE;
+       gboolean reply = FALSE;
 
        if (if_path == NULL) {
                if_path = netconfig_wifi_get_supplicant_interface();
@@ -341,13 +366,7 @@ static int __netconfig_wifi_bssid_request_scan(char *if_path)
 
        if (if_path == NULL) {
                DBG("Fail to get wpa_supplicant DBus path");
-               return -ESRCH;
-       }
-
-       connection = netdbus_get_connection();
-       if (connection == NULL) {
-               ERR("Failed to get GDBusconnection");
-               return -EIO;
+               goto out;
        }
 
        builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
@@ -355,24 +374,26 @@ static int __netconfig_wifi_bssid_request_scan(char *if_path)
        message = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
        g_variant_builder_unref(builder);
 
-       g_dbus_connection_call(connection,
+       DBG("[net-config]: TizenMW-->WPAS: .Interface.Scan");
+       reply = netconfig_supplicant_invoke_dbus_method_nonblock(
                        SUPPLICANT_SERVICE,
                        if_path,
                        SUPPLICANT_INTERFACE ".Interface",
                        "Scan",
                        message,
-                       NULL,
-                       G_DBUS_CALL_FLAGS_NONE,
-                       NETCONFIG_DBUS_REPLY_TIMEOUT,
-                       netdbus_get_cancellable(),
-                       NULL,
-                       NULL);
+                       (GAsyncReadyCallback) __netconfig_wifi_bssid_scan_request_reply);
+
+       if (reply != TRUE) {
+               ERR("Fail to Scan");
+               goto out;
+       }
 
        netconfig_is_device_scanning = TRUE;
 
+out:
        if (is_free_required)
                g_free(if_path);
-       g_variant_unref(message);
+
        /* Clear bss_info_list for the next scan result */
        if (bssid_info_list) {
                g_slist_free_full(bssid_info_list, g_free);
@@ -387,7 +408,7 @@ static int __netconfig_wifi_bssid_request_scan(char *if_path)
 static void __netconfig_wifi_interface_create_result(
                GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
-       GVariant *message;
+       GVariant *message = NULL;
        gchar *path = NULL;
        GDBusConnection *conn = NULL;
        GError *error = NULL;
@@ -410,48 +431,43 @@ static void __netconfig_wifi_interface_create_result(
                        g_free(path);
                } else
                        __netconfig_wifi_bssid_request_scan(NULL);
+
+               g_error_free(error);
        } else {
                ERR("Failed to create interface, Error: %d[%s]", error->code, error->message);
                __netconfig_set_bssid_scan_mode(FALSE);
                wifi_power_driver_and_supplicant(FALSE);
+               g_error_free(error);
        }
 
        g_variant_unref(message);
+       netconfig_gdbus_pending_call_unref();
 }
 
 static int  __netconfig_wifi_bssid_create_interface(void)
 {
-       GDBusConnection *connection = NULL;
        GVariant *message = NULL;
        GVariantBuilder *builder = NULL;
        const char *key = "Ifname";
        const char *val = WIFI_IFNAME;
-
-       connection = netdbus_get_connection();
-       if (connection == NULL) {
-               DBG("Failed to get GDBusconnection");
-               return -EIO;
-       }
+       gboolean reply = FALSE;
 
        builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
        g_variant_builder_add(builder, "{sv}", key, g_variant_new_string(val));
        message = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
        g_variant_builder_unref(builder);
 
-       g_dbus_connection_call(connection,
+       DBG("[net-config]: TizenMW-->WPAS: CreateInterface");
+       reply = netconfig_supplicant_invoke_dbus_method_nonblock(
                        SUPPLICANT_SERVICE,
                        SUPPLICANT_PATH,
                        SUPPLICANT_INTERFACE,
                        "CreateInterface",
                        message,
-                       NULL,
-                       G_DBUS_CALL_FLAGS_NONE,
-                       NETCONFIG_DBUS_REPLY_TIMEOUT,
-                       netdbus_get_cancellable(),
-                       (GAsyncReadyCallback) __netconfig_wifi_interface_create_result,
-                       NULL);
+                       (GAsyncReadyCallback) __netconfig_wifi_interface_create_result);
 
-       g_variant_unref(message);
+       if (reply != TRUE)
+               ERR("Fail to CreateInterface");
 
        return 0;
 }