Message ID | 1581005579-11826-1-git-send-email-philippe.reynes@softathome.com |
---|---|
State | Accepted |
Commit | 58b209cf6060db60375a2ca9fb21febfae3b8f31 |
Headers | show |
Series | test: aes: fix memleak | expand |
On Thu, Feb 06, 2020 at 05:12:59PM +0100, Philippe Reynes wrote: > 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 <philippe.reynes at softathome.com> Applied to u-boot/master, thanks!
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);
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 <philippe.reynes at softathome.com> --- test/lib/test_aes.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)