diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c
index ccfe6dda64d95fa0a80026f71ae595ed7f663cf9..824d12600eeba11a718159baeb6cb12291799d1d 100644
--- a/src/core/cntlr_map.c
+++ b/src/core/cntlr_map.c
@@ -423,6 +423,7 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_buff *rx_cmdu)
 		return -1;
 
 	ret = send_cmdu(c, cmdu);
+	cmdu_free(cmdu);
 	return 0;
 out:
 	cmdu_free(cmdu);
diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c
index ef07efb3162cab91c35550ae07275571efc42cb9..a6c8c64976727f644b5665cc27c41b6be6bd9aed 100644
--- a/src/core/cntlr_tlv_generator.c
+++ b/src/core/cntlr_tlv_generator.c
@@ -269,8 +269,11 @@ int cntlr_gen_wsc(struct controller *c, struct cmdu_buff *frm,
 	ret = cmdu_put_tlv(frm, t);
 	if (ret) {
 		err("%s: error: cmdu_put_tlv()\n", __func__);
+		free(m2);
 		return -1;
 	}
+
+	free(m2);
 	return 0;
 }