diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c
index b1706340db6e100e686f15264a540efd63b022c7..ed10aaa93f767e47c8bb1af954b44bd277407ce4 100644
--- a/src/core/cntlr_ubus.c
+++ b/src/core/cntlr_ubus.c
@@ -610,7 +610,7 @@ static int cntlr_sta_caps(struct ubus_context *ctx, struct ubus_object *obj,
 		strncpy(agent, blobmsg_data(tb[AP_POLICY_AGENT]),
 				sizeof(agent) - 1);
 		if (!hwaddr_aton(agent, cmdu_data->origin))
-			return UBUS_STATUS_UNKNOWN_ERROR;
+			goto fail_cmdu;
 	}
 
 	// TODO: ff:ff:ff:ff:ff:ff = send to all agents
@@ -621,19 +621,19 @@ static int cntlr_sta_caps(struct ubus_context *ctx, struct ubus_object *obj,
 	p = calloc(1, sizeof(struct tlv_client_info));
 	if (!p) {
 		fprintf(stderr, "failed to malloc cmdu\n");
-		return UBUS_STATUS_UNKNOWN_ERROR;
+		goto fail_cmdu;
 	}
 
 	if (!hwaddr_aton(sta, hw_sta)) {
 		fprintf(stderr, "STA Capability Query: provide STA " \
 				"address in format 11:22:33...\n");
-		return UBUS_STATUS_INVALID_ARGUMENT;
+		goto fail_p;
 	}
 
 	if (!hwaddr_aton(bssid, hw_bssid)) {
 		fprintf(stderr, "STA Capability Query: provide BSSID " \
 				"address in format 11:22:33...\n");
-		return UBUS_STATUS_INVALID_ARGUMENT;
+		goto fail_p;
 	}
 
 	p->tlv_type = MAP_TLV_CLIENT_INFO;
@@ -648,10 +648,13 @@ static int cntlr_sta_caps(struct ubus_context *ctx, struct ubus_object *obj,
 		cmdu_data->tlvs[0] = (uint8_t *)p;
 
 	send_cmdu(c, cmdu_data);
-
 	map_free_cmdu(cmdu_data);
-
 	return 0;
+fail_p:
+	map_free_tlv_cstruct((uint8_t *) p);
+fail_cmdu:
+	map_free_cmdu(cmdu_data);
+	return UBUS_STATUS_UNKNOWN_ERROR;
 }
 
 static int cntlr_teardown_ap(struct ubus_context *ctx, struct ubus_object *obj,
diff --git a/src/core/config.c b/src/core/config.c
index e6e6f82288fc5ebc9c2d0c0ff8b1b105aa5a342f..293494f6a0bce75b6bd821e781a6670de82fa6b4 100644
--- a/src/core/config.c
+++ b/src/core/config.c
@@ -425,11 +425,36 @@ int cntlr_config_reload(struct controller_config *cfg)
 	return 0;
 }
 
+static int clean_steer_btm_excl(struct agent_policy *p)
+{
+	struct stax *n, *tmp;
+
+	list_for_each_entry_safe(n, tmp, &p->btmsteer_exlist, list) {
+		list_del(&n->list);
+		free(n);
+	}
+
+	return 0;
+}
+static int clean_steer_excl(struct agent_policy *p)
+{
+	struct stax *n, *tmp;
+
+	list_for_each_entry_safe(n, tmp, &p->steer_exlist, list) {
+		list_del(&n->list);
+		free(n);
+	}
+
+	return 0;
+}
+
 int clean_agent_policies(struct controller_config *cfg)
 {
 	struct agent_policy *p, *tmp;
 
 	list_for_each_entry_safe(p, tmp, &cfg->policylist, list) {
+		clean_steer_btm_excl(p);
+		clean_steer_excl(p);
 		list_del(&p->list);
 		free(p);
 	}