Remove locking in CRYPTO_secure_allocated()

The check for being in secure memory is against the arena.  The arena is only
ever modified by sh_init() and sh_done() and in both cases, it is done without
locking.  Thus, it is safe for the CRYPTO_secure_allocated() to not lock.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14775)
This commit is contained in:
Pauli 2021-04-06 12:25:58 +10:00
parent 0bc27f7203
commit 44e82b813f

View File

@ -208,15 +208,14 @@ void CRYPTO_secure_clear_free(void *ptr, size_t num,
int CRYPTO_secure_allocated(const void *ptr)
{
#ifndef OPENSSL_NO_SECURE_MEMORY
int ret;
if (!secure_mem_initialized)
return 0;
if (!CRYPTO_THREAD_read_lock(sec_malloc_lock))
return 0;
ret = sh_allocated(ptr);
CRYPTO_THREAD_unlock(sec_malloc_lock);
return ret;
/*
* Only read accesses to the arena take place in sh_allocated() and this
* is only changed by the sh_init() and sh_done() calls which are not
* locked. Hence, it is safe to make this check without a lock too.
*/
return sh_allocated(ptr);
#else
return 0;
#endif /* OPENSSL_NO_SECURE_MEMORY */