diff --git a/src/agent.c b/src/agent.c index a3ac92505890b8daba1fd5a6418a4a566a65ff6a..d414b5b593c6a244ec42299725df83e3b593fa98 100644 --- a/src/agent.c +++ b/src/agent.c @@ -2207,7 +2207,7 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) return; if (!strtob(framestr, len, frame)) { - free(framestr); + free(frame); return; } @@ -2257,9 +2257,9 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) } else agent_exec_platform_scripts("bsta_enable_all"); } - - free(frame); } + + free(frame); } } @@ -2460,7 +2460,7 @@ static int wifi_process_action_frame(struct agent *a, const char *framestr) /* Obtain number of Measurement Reports */ while (pos < tags_len) { if (frame_ptr->tags[pos] != 0x27) - return -1; + goto out_frame; /* +2 for tag_no & tag_len */ pos += (frame_ptr->tags[pos+1] + 2); count++; @@ -2468,7 +2468,7 @@ static int wifi_process_action_frame(struct agent *a, const char *framestr) s = find_sta_by_mac(a, frame_ptr->src); if (!s) - return -1; + goto out_frame; if (!s->supports_bcnreport) s->supports_bcnreport = true; @@ -2486,6 +2486,8 @@ static int wifi_process_action_frame(struct agent *a, const char *framestr) send_beacon_metrics_response(a, frame_ptr->src, count, frame_ptr->tags, tags_len); + + free(frame); } return 0; diff --git a/src/agent_cmdu.c b/src/agent_cmdu.c index f0e6d528c586ad528cc70ab0a5562df55bf6974d..ae18d76ed425952d04a1354b7436c0d25ac21051 100644 --- a/src/agent_cmdu.c +++ b/src/agent_cmdu.c @@ -625,7 +625,7 @@ struct cmdu_buff *agent_gen_cmdu_beacon_metrics_resp(struct agent *a, report_elems_nr, report_elem, elem_len)) - return NULL; + goto out; frm = cmdu_alloc_custom(CMDU_BEACON_METRICS_RESPONSE, &mid, NULL, origin, tlv, t_len); diff --git a/src/agent_map.c b/src/agent_map.c index 16611b3d1ec37240f83279a921ce2799af951390..144b6cbe4ee4d18b8e2aab1d67fd53bdbfdb4e65 100644 --- a/src/agent_map.c +++ b/src/agent_map.c @@ -1718,6 +1718,8 @@ int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu) */ agent_autoconfig_event(a, radio->name, "teardown", "IOPSYS extension process error"); + if (ext) + free(ext); return -1; } @@ -1728,6 +1730,7 @@ int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu) wifi_teardown_map_ifaces_by_radio(a, radio->name); agent_autoconfig_event(a, radio->name, "teardown", "teardown bit set"); + free(ext); goto teardown; } @@ -1740,6 +1743,7 @@ int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu) wifi_teardown_map_ifaces_by_radio(a, radio->name); agent_autoconfig_event(a, radio->name, "teardown", "M2 apply failure"); + free(ext); goto teardown; } @@ -4613,7 +4617,7 @@ int handle_hld_message(void *agent, struct cmdu_buff *rx_cmdu) &sync_config_reqsize, &key); if (ret) { err("Failed to build sync-config-req frame!\n"); - return ret; + goto error; } if (a->sync_config_req) @@ -4625,8 +4629,10 @@ int handle_hld_message(void *agent, struct cmdu_buff *rx_cmdu) cmdu = agent_gen_higher_layer_data(a, a->cntlr_almac, res_proto, sync_config_req, sync_config_reqsize); - if (!cmdu) - return -1; + if (!cmdu) { + ret = -1; + goto error; + } agent_send_cmdu(a, cmdu); cmdu_free(cmdu); @@ -4654,7 +4660,7 @@ int handle_hld_message(void *agent, struct cmdu_buff *rx_cmdu) &out); if (ret) { err("Error processing dyn-controller-config-sync response\n"); - return ret; + goto error; } agent_get_controller_enabled(a, enabled); @@ -4665,8 +4671,12 @@ int handle_hld_message(void *agent, struct cmdu_buff *rx_cmdu) set_value_by_string("mapcontroller", "controller", "enabled", enabled, UCI_TYPE_STRING); + free(out.data); } + +error: #endif /* AGENT_SYNC_DYNAMIC_CNTLR_CONFIG */ + free(usrdata); return ret; } diff --git a/src/agent_ubus.c b/src/agent_ubus.c index 3b03e52e60eb1ba569e665315386ff62ed873422..edb6895e5f950e37d20ea812195835bd5589c866 100644 --- a/src/agent_ubus.c +++ b/src/agent_ubus.c @@ -367,7 +367,7 @@ static int bcn_metrics_query(struct ubus_context *ctx, struct ubus_object *obj, reports = calloc(num_report, sizeof(struct sta_channel_report)); if (!reports) { - ret = -ENOMEM; + ret = UBUS_STATUS_UNKNOWN_ERROR; goto out; } @@ -421,6 +421,10 @@ static int bcn_metrics_query(struct ubus_context *ctx, struct ubus_object *obj, BLOBMSG_TYPE_INT32); element = calloc(num_element, sizeof(uint8_t)); + if (!element) { + ret = UBUS_STATUS_UNKNOWN_ERROR; + goto out; + } blobmsg_for_each_attr(attr_id, tb[BCN_METRICS_ELEMENT_IDS], rem_id) { @@ -526,7 +530,7 @@ static int unassoc_sta_lm_query(struct ubus_context *ctx, metrics = calloc(num_metrics, sizeof(struct unassoc_sta_metric)); if (!metrics) { - ret = -ENOMEM; + ret = UBUS_STATUS_UNKNOWN_ERROR; goto out; } @@ -598,8 +602,10 @@ static int unassoc_sta_lm_query(struct ubus_context *ctx, cmdu = agent_gen_unassoc_sta_metric_query(a, agent_mac, opclass, num_metrics, metrics); - if (!cmdu) - return UBUS_STATUS_UNKNOWN_ERROR; + if (!cmdu) { + ret = UBUS_STATUS_UNKNOWN_ERROR; + goto out; + } agent_send_cmdu(a, cmdu); cmdu_free(cmdu); @@ -801,6 +807,8 @@ static int higher_layer_data(struct ubus_context *ctx, struct ubus_object *obj, if (!cmdu) goto error; + free(data); + agent_send_cmdu(a, cmdu); cmdu_free(cmdu); diff --git a/src/dynbh/dynbh.c b/src/dynbh/dynbh.c index c5afb63d1d2b49e0b3a256c446475fe5685d79ad..a1b7807c1fa7da1afd64e7d6f1b0c2c90b74d48e 100644 --- a/src/dynbh/dynbh.c +++ b/src/dynbh/dynbh.c @@ -646,6 +646,8 @@ static int mapclient_handle_cmdu_notification(struct blob_attr *msg, struct mapc cmdu = cmdu_alloc_custom(type, &mid, in_ifname, srcmac, tlv, len); if (!cmdu) { fprintf(stderr, "%s: cmdu_alloc_custom() failed!\n", __func__); + if (tlv) + free(tlv); return -1; } memcpy(cmdu->origin, origin, 6); @@ -673,6 +675,7 @@ static int mapclient_handle_cmdu_notification(struct blob_attr *msg, struct mapc error: if (tlv) free(tlv); + cmdu_free(cmdu); return ret; }