From c04fc93d146bb7aafe33b9ddda78bfaada03a659 Mon Sep 17 00:00:00 2001 From: Niraj Kumar Goit Date: Fri, 7 Dec 2018 15:32:56 +0530 Subject: [PATCH] Fixed memory related issues reported by valgrind. ==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 --- src/dbus/netsupplicant.c | 3 ++ src/wifi-bssid-scan.c | 80 +++++++++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 32 deletions(-) diff --git a/src/dbus/netsupplicant.c b/src/dbus/netsupplicant.c index a1d1445..f31e19e 100755 --- a/src/dbus/netsupplicant.c +++ b/src/dbus/netsupplicant.c @@ -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; } diff --git a/src/wifi-bssid-scan.c b/src/wifi-bssid-scan.c index f285c52..200a671 100755 --- a/src/wifi-bssid-scan.c +++ b/src/wifi-bssid-scan.c @@ -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; } -- 2.7.4