Fixed crash when station is removed due to inactive time 38/146538/2 accepted/tizen/unified/20170829.140535 submit/tizen/20170829.101337 submit/tizen_4.0/20170830.011812
authorSaurav Babu <saurav.babu@samsung.com>
Tue, 29 Aug 2017 08:50:39 +0000 (14:20 +0530)
committersaerome kim <saerome.kim@samsung.com>
Tue, 29 Aug 2017 09:57:50 +0000 (09:57 +0000)
When station is removed due to inactive time then it is removed from
list named "iter" so its corresponding data in "sta_list" becomes
dangling pointer which results in crash when "service->station_list" is
freed on calling g_list_free_full()

Change-Id: Id4d02bf576a2d67e746e3a42cd11ae2665397fc1
Signed-off-by: Saurav Babu <saurav.babu@samsung.com>
src/wmesh-peer-monitor.c

index 367584f..a95b399 100644 (file)
@@ -87,7 +87,7 @@ static int _get_station_info(void *pdata)
                        /* Remove this node from station list in kernel */
                        wmesh_netlink_del_station_info(info->mesh_interface, item->bssid);
                        /* Remove current linked list */
-                       iter = g_list_remove(iter, item);
+                       sta_list = g_list_remove(iter, item);
                        /* Send existing node disjoined */
                        WMESH_LOGE("[%s] disjoined", item->bssid);
 
@@ -116,6 +116,7 @@ static int _get_station_info(void *pdata)
        g_list_free_full(service->station_list, _on_station_list_destroy);
        /* Copy new mesh station list */
        service->station_list = sta_list;
+       WMESH_LOGD("station_list length %d", g_list_length(service->station_list));
 
        iter = service->station_list;
        while (iter) {