dnsproxy: safely access server_list_sec for removing a list node 92/309392/1 accepted/tizen_unified accepted/tizen_unified_x accepted/tizen/unified/20240411.142644 accepted/tizen/unified/x/20240412.023931
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 9 Apr 2024 08:03:48 +0000 (17:03 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 9 Apr 2024 10:06:15 +0000 (19:06 +0900)
Safely access g_list, server_list_sec, by finding the next list
node before removing a list node from g_slist with g_list_remove().

Change-Id: Ia60a129605b53995726c98b945936d2b87dcb97a
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
src/dnsproxy.c

index a84693e..8e3ce97 100755 (executable)
@@ -2344,8 +2344,10 @@ static gboolean udp_server_event(GIOChannel *channel, GIOCondition condition,
 #if defined TIZEN_EXT
        GSList *list;
 
-       for (list = server_list_sec; list; list = list->next) {
+       list = server_list_sec;
+       while (list) {
                struct server_data *new_data = list->data;
+               list = list->next;
 
                if (new_data == data) {
                        destroy_server_sec(data);
@@ -2725,8 +2727,10 @@ static void destroy_all_server_sec()
 
        DBG("remove all dns server");
 
-       for (list = server_list_sec; list; list = list->next) {
+       list = server_list_sec;
+       while (list) {
                struct server_data *server = list->data;
+               list = list->next;
                destroy_server_sec(server);
        }
        server_list_sec = NULL;