diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index b26ba55cc82d9b3365a6f1ba0667ddce3a639b5f..67d647ccf27ffc677b5e9a02d8198ce79fd359af 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -2479,17 +2479,18 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu,
 		return -1;
 	}
 
-	/* TODO: use while[0][idx]*/
-	if (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][0]) {
+	while (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][idx]) {
 		uint8_t *tv_data =
-			(uint8_t *)tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][0]->data;
+			(uint8_t *)tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][idx]->data;
 		struct tlv_assoc_sta_link_metrics *p =
 			(struct tlv_assoc_sta_link_metrics *)tv_data;
 		struct sta *s;
 
+		idx++;
+
 		s = cntlr_find_sta(c->sta_table, p->macaddr);
 		if (!s)
-			return -1;
+			continue;
 
 		offset = sizeof(*p);
 		for (i = 0; i < p->num_bss; i++) {
@@ -2501,7 +2502,7 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu,
 			if (!fh) {
 				offset += sizeof(*b);
 				continue;
-                        }
+			}
 
 			if (memcmp(s->bssid, b->bssid, 6)) {
 				cntlr_dbg(LOG_STA,
@@ -2524,6 +2525,11 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu,
 			memcpy(&inform_stalist[6 * iidx++], s->de_sta->macaddr, 6);
 	}
 
+	if (iidx == 0) {
+		cntlr_dbg(LOG_STA, "%s: No STA found in Assoc-Link-Metrics-Resp\n", __func__);
+		return -1;
+	}
+
 	idx = 0;
 	while (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_EXT_LINK_METRICS_IDX][idx]) {
 		uint8_t *tv_data = (uint8_t *)