From 4907696ed42a726d7da14443d1b621ac8f3f7d85 Mon Sep 17 00:00:00 2001 From: Marco Oliverio Date: Wed, 29 Dec 2021 14:43:43 +0100 Subject: [PATCH] wolfssl: keys: add missing wc_AesFree() when setting new keys --- src/keys.c | 57 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/src/keys.c b/src/keys.c index b7218974c..b5bef34e0 100644 --- a/src/keys.c +++ b/src/keys.c @@ -2476,17 +2476,25 @@ static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs, int aesRet = 0; if (enc) { - if (enc->aes == NULL) + if (enc->aes == NULL) { enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (enc->aes == NULL) - return MEMORY_E; + if (enc->aes == NULL) + return MEMORY_E; + } else { + wc_AesFree(enc->aes); + } + XMEMSET(enc->aes, 0, sizeof(Aes)); } if (dec) { - if (dec->aes == NULL) + if (dec->aes == NULL) { dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (dec->aes == NULL) - return MEMORY_E; + if (dec->aes == NULL) + return MEMORY_E; + } else { + wc_AesFree(dec->aes); + } + XMEMSET(dec->aes, 0, sizeof(Aes)); } if (enc) { @@ -2553,17 +2561,25 @@ static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs, int gcmRet; if (enc) { - if (enc->aes == NULL) + if (enc->aes == NULL) { enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (enc->aes == NULL) - return MEMORY_E; + if (enc->aes == NULL) + return MEMORY_E; + } else { + wc_AesFree(enc->aes); + } + XMEMSET(enc->aes, 0, sizeof(Aes)); } if (dec) { - if (dec->aes == NULL) + if (dec->aes == NULL) { dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (dec->aes == NULL) - return MEMORY_E; + if (dec->aes == NULL) + return MEMORY_E; + } else { + wc_AesFree(dec->aes); + } + XMEMSET(dec->aes, 0, sizeof(Aes)); } @@ -2653,17 +2669,24 @@ static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs, int CcmRet; if (enc) { - if (enc->aes == NULL) + if (enc->aes == NULL) { enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (enc->aes == NULL) - return MEMORY_E; + if (enc->aes == NULL) + return MEMORY_E; + } else { + wc_AesFree(enc->aes); + } + XMEMSET(enc->aes, 0, sizeof(Aes)); } if (dec) { - if (dec->aes == NULL) + if (dec->aes == NULL) { dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER); - if (dec->aes == NULL) + if (dec->aes == NULL) return MEMORY_E; + } else { + wc_AesFree(dec->aes); + } XMEMSET(dec->aes, 0, sizeof(Aes)); }