From patchwork Thu Feb 6 16:12:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe REYNES X-Patchwork-Id: 236017 List-Id: U-Boot discussion From: philippe.reynes at softathome.com (Philippe Reynes) Date: Thu, 6 Feb 2020 17:12:59 +0100 Subject: [PATCH] test: aes: fix memleak Message-ID: <1581005579-11826-1-git-send-email-philippe.reynes@softathome.com> In the first version, the result of malloc is checked with ut_assertnonnull. But on a fail, this macro exit the function, so previously malloc are not freed. So to avoid a memleak, we don't use ut_assertnonnull, but simply check the return of malloc. If one has failed, we freed all the allocated memory and quit the function. Reported-by: Coverity (CID: 284403) Reported-by: Coverity (CID: 284404) Reported-by: Coverity (CID: 284405) Reported-by: Coverity (CID: 284406) Reported-by: Coverity (CID: 284407) Signed-off-by: Philippe Reynes --- test/lib/test_aes.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/lib/test_aes.c b/test/lib/test_aes.c index b7b4b77..fb8a0b1 100644 --- a/test/lib/test_aes.c +++ b/test/lib/test_aes.c @@ -88,17 +88,17 @@ static int _lib_test_aes_run(struct unit_test_state *uts, int key_len, /* Allocate all the buffer */ key = malloc(key_len); - ut_assertnonnull(key); key_exp = malloc(key_exp_len); - ut_assertnonnull(key_exp); iv = malloc(AES_BLOCK_LENGTH); - ut_assertnonnull(iv); nocipher = malloc(num_block * AES_BLOCK_LENGTH); - ut_assertnonnull(nocipher); ciphered = malloc((num_block + 1) * AES_BLOCK_LENGTH); - ut_assertnonnull(ciphered); uncipher = malloc((num_block + 1) * AES_BLOCK_LENGTH); - ut_assertnonnull(uncipher); + + if (!key || !key_exp || !iv || !nocipher || !ciphered || !uncipher) { + printf("%s: can't allocate memory\n", __func__); + ret = -1; + goto out; + } /* Initialize all buffer */ rand_buf(key, key_len); @@ -127,6 +127,7 @@ static int _lib_test_aes_run(struct unit_test_state *uts, int key_len, ret = -1; }; + out: /* Free all the data */ free(key); free(key_exp);