From c9842d9af99e32eb3a165d42da49efc5a625cd9a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 26 Dec 2018 17:57:06 +0100 Subject: [PATCH] Make allocate_memory() error path less confusing --- src/libsodium/crypto_pwhash/argon2/argon2-core.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.c b/src/libsodium/crypto_pwhash/argon2/argon2-core.c index 530778e4..bfe3fbbf 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.c @@ -80,14 +80,11 @@ allocate_memory(block_region **region, uint32_t m_cost) return ARGON2_MEMORY_ALLOCATION_ERROR; /* LCOV_EXCL_LINE */ } memory_size = sizeof(block) * m_cost; - if (m_cost == 0 || - memory_size / m_cost != - sizeof(block)) { /*1. Check for multiplication overflow*/ + if (m_cost == 0 || memory_size / m_cost != sizeof(block)) { return ARGON2_MEMORY_ALLOCATION_ERROR; /* LCOV_EXCL_LINE */ } - *region = (block_region *) malloc( - sizeof(block_region)); /*2. Try to allocate region*/ - if (!*region) { + *region = (block_region *) malloc(sizeof(block_region)); + if (*region == NULL) { return ARGON2_MEMORY_ALLOCATION_ERROR; /* LCOV_EXCL_LINE */ } (*region)->base = (*region)->memory = NULL; @@ -116,6 +113,8 @@ allocate_memory(block_region **region, uint32_t m_cost) } #endif if (base == NULL) { + free(*region); + *region = NULL; return ARGON2_MEMORY_ALLOCATION_ERROR; /* LCOV_EXCL_LINE */ } (*region)->base = base;