Blame SOURCES/rh1500442-wpa_supplicant-Fix-memory-leaks-in-ieee802_1x_create.patch

8bd3b2
From 22151b111b493d4604c9490327c40fdac7bc4b37 Mon Sep 17 00:00:00 2001
8bd3b2
Message-Id: <22151b111b493d4604c9490327c40fdac7bc4b37.1525684664.git.davide.caratti@gmail.com>
8bd3b2
From: Davide Caratti <davide.caratti@gmail.com>
8bd3b2
Date: Thu, 8 Mar 2018 17:15:02 +0100
8bd3b2
Subject: [PATCH] wpa_supplicant: Fix memory leaks in
8bd3b2
 ieee802_1x_create_preshared_mka()
8bd3b2
8bd3b2
In case MKA is initialized successfully, local copies of CAK and CKN
8bd3b2
were allocated, but never freed. Ensure that such memory is released
8bd3b2
also when ieee802_1x_kay_create_mka() returns a valid pointer.
8bd3b2
8bd3b2
Fixes: ad51731abf06 ("wpa_supplicant: Allow pre-shared (CAK,CKN) pair for MKA")
8bd3b2
Signed-off-by: Davide Caratti <davide.caratti@gmail.com>
8bd3b2
---
8bd3b2
 wpa_supplicant/wpas_kay.c | 32 +++++++++++++++-----------------
8bd3b2
 1 file changed, 15 insertions(+), 17 deletions(-)
8bd3b2
8bd3b2
diff --git a/wpa_supplicant/wpas_kay.c b/wpa_supplicant/wpas_kay.c
8bd3b2
index 11708b8a6..d3d06b8ae 100644
8bd3b2
--- a/wpa_supplicant/wpas_kay.c
8bd3b2
+++ b/wpa_supplicant/wpas_kay.c
8bd3b2
@@ -392,25 +392,25 @@ void * ieee802_1x_create_preshared_mka(struct wpa_supplicant *wpa_s,
8bd3b2
 {
8bd3b2
 	struct mka_key *cak;
8bd3b2
 	struct mka_key_name *ckn;
8bd3b2
-	void *res;
8bd3b2
+	void *res = NULL;
8bd3b2
 
8bd3b2
 	if ((ssid->mka_psk_set & MKA_PSK_SET) != MKA_PSK_SET)
8bd3b2
-		return NULL;
8bd3b2
-
8bd3b2
-	if (ieee802_1x_alloc_kay_sm(wpa_s, ssid) < 0)
8bd3b2
-		return NULL;
8bd3b2
-
8bd3b2
-	if (!wpa_s->kay || wpa_s->kay->policy == DO_NOT_SECURE)
8bd3b2
-		return NULL;
8bd3b2
+		goto end;
8bd3b2
 
8bd3b2
 	ckn = os_zalloc(sizeof(*ckn));
8bd3b2
 	if (!ckn)
8bd3b2
-		goto dealloc;
8bd3b2
+		goto end;
8bd3b2
 
8bd3b2
 	cak = os_zalloc(sizeof(*cak));
8bd3b2
 	if (!cak)
8bd3b2
 		goto free_ckn;
8bd3b2
 
8bd3b2
+	if (ieee802_1x_alloc_kay_sm(wpa_s, ssid) < 0 || !wpa_s->kay)
8bd3b2
+		goto free_cak;
8bd3b2
+
8bd3b2
+	if (wpa_s->kay->policy == DO_NOT_SECURE)
8bd3b2
+		goto dealloc;
8bd3b2
+
8bd3b2
 	cak->len = MACSEC_CAK_LEN;
8bd3b2
 	os_memcpy(cak->key, ssid->mka_cak, cak->len);
8bd3b2
 
8bd3b2
@@ -419,17 +419,15 @@ void * ieee802_1x_create_preshared_mka(struct wpa_supplicant *wpa_s,
8bd3b2
 
8bd3b2
 	res = ieee802_1x_kay_create_mka(wpa_s->kay, ckn, cak, 0, PSK, FALSE);
8bd3b2
 	if (res)
8bd3b2
-		return res;
8bd3b2
+		goto free_cak;
8bd3b2
 
8bd3b2
+dealloc:
8bd3b2
 	/* Failed to create MKA */
8bd3b2
+	ieee802_1x_dealloc_kay_sm(wpa_s);
8bd3b2
+free_cak:
8bd3b2
 	os_free(cak);
8bd3b2
-
8bd3b2
-	/* fallthrough */
8bd3b2
-
8bd3b2
 free_ckn:
8bd3b2
 	os_free(ckn);
8bd3b2
-dealloc:
8bd3b2
-	ieee802_1x_dealloc_kay_sm(wpa_s);
8bd3b2
-
8bd3b2
-	return NULL;
8bd3b2
+end:
8bd3b2
+	return res;
8bd3b2
 }
8bd3b2
-- 
8bd3b2
2.14.3
8bd3b2