[HICN-404] double-free in facemgr (facemgr_list_facelets_json) + valgrind fixes 69/23569/1
authorJordan Augé <jordan.auge+fdio@cisco.com>
Wed, 20 Nov 2019 17:06:01 +0000 (18:06 +0100)
committerJordan Augé <jordan.auge+fdio@cisco.com>
Wed, 20 Nov 2019 17:06:01 +0000 (18:06 +0100)
Change-Id: Id57873d3f4152af654f3bc27778d7015495597d7
Signed-off-by: Jordan Augé <jordan.auge+fdio@cisco.com>
ctrl/facemgr/src/api.c
ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c
ctrl/libhicnctrl/src/api.c

index dfb23db..13b8112 100644 (file)
@@ -2087,7 +2087,6 @@ facemgr_list_facelets_json(const facemgr_t * facemgr, char ** buffer)
         if (size != 0 && cur >= s + size)
             goto END;
     }
-    free(facelet_array);
 
     rc = snprintf(cur, s + size - cur, "]}\n");
     if (rc < 0)
index a6cd44f..4ba4c5b 100644 (file)
@@ -101,7 +101,6 @@ int hl_process_state(interface_t * interface)
             }
             data->state = HL_STATE_FACES_SENT;
             break;
-            break;
 
         case HL_STATE_FACES_RECEIVED:
             data->state = HL_STATE_IDLE;
@@ -601,7 +600,7 @@ int hl_callback(interface_t * interface, int fd, void * unused)
                 facelet_set_event(facelet, FACELET_EVENT_GET);
                 interface_raise_event(interface, facelet);
             }
-
+            hc_data_free(results);
             hc_data_free(data->polled_routes);
             data->polled_routes = NULL;
             data->state = HL_STATE_FACES_RECEIVED;
index 1a5bd8c..2d8ee40 100644 (file)
@@ -521,6 +521,8 @@ hc_sock_free(hc_sock_t * s)
     } else {
         for (unsigned i = 0; i < n; i++) {
             hc_sock_request_t * request = request_array[i];
+            if (hc_sock_map_remove(s->map, request->seq, NULL) < 0)
+                ERROR("[hc_sock_process] Error removing request from map");
             hc_sock_request_free(request);
         }
         free(request_array);
@@ -669,6 +671,8 @@ hc_sock_process(hc_sock_t * s, hc_data_t ** data)
                     if (s->remaining == 0) {
                         hc_data_set_complete(request->data);
                         *data = request->data;
+                        if (hc_sock_map_remove(s->map, request->seq, NULL) < 0)
+                            ERROR("[hc_sock_process] Error removing request from map");
                         hc_sock_request_free(request);
                     } else {
                         /* We only remember it if there is still data to parse */