Skip to content

Commit

Permalink
Raise an Err when CRYPTO_THREAD_lock_new fails
Browse files Browse the repository at this point in the history
Add missing error raise call, as it is done everywhere else.
and as CRYPTO_THREAD_lock_new don't do it internally.

Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Matt Caswell <[email protected]>
  • Loading branch information
FdaSilvaYY authored and mattcaswell committed Jun 1, 2016
1 parent 57358a8 commit b2b361f
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 3 deletions.
5 changes: 4 additions & 1 deletion crypto/asn1/tasn_utl.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ int asn1_set_choice_selector(ASN1_VALUE **pval, int value,
* then the count is incremented. If op is 0 count is set to 1. If op is -1
* count is decremented and the return value is the current reference count
* or 0 if no reference count exists.
* FIXME: return and manage any error from inside this method
*/

int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it)
Expand All @@ -68,8 +69,10 @@ int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it)
if (op == 0) {
*lck = 1;
*lock = CRYPTO_THREAD_lock_new();
if (*lock == NULL)
if (*lock == NULL) {
/* FIXME: should report an error (-1) at this point */
return 0;
}
return 1;
}
CRYPTO_atomic_add(lck, op, &ret, *lock);
Expand Down
1 change: 1 addition & 0 deletions crypto/dh/dh_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ DH *DH_new_method(ENGINE *engine)
ret->references = 1;
ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) {
DHerr(DH_F_DH_NEW_METHOD, ERR_R_MALLOC_FAILURE);
OPENSSL_free(ret);
return NULL;
}
Expand Down
1 change: 1 addition & 0 deletions crypto/dsa/dsa_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ DSA *DSA_new_method(ENGINE *engine)
ret->references = 1;
ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) {
DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_MALLOC_FAILURE);
OPENSSL_free(ret);
return NULL;
}
Expand Down
1 change: 1 addition & 0 deletions crypto/dso/dso_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ static DSO *DSO_new_method(DSO_METHOD *meth)
ret->references = 1;
ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) {
DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE);
sk_void_free(ret->meth_data);
OPENSSL_free(ret);
return NULL;
Expand Down
8 changes: 6 additions & 2 deletions engines/e_chil.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,10 @@ static int bind_helper(ENGINE *e)
# endif

chil_lock = CRYPTO_THREAD_lock_new();
if (chil_lock == NULL)
if (chil_lock == NULL) {
HWCRHKerr(HWCRHK_F_BIND_HELPER, ERR_R_MALLOC_FAILURE);
return 0;
}

if (!ENGINE_set_id(e, engine_hwcrhk_id) ||
!ENGINE_set_name(e, engine_hwcrhk_name) ||
Expand Down Expand Up @@ -1092,8 +1094,10 @@ static int hwcrhk_mutex_init(HWCryptoHook_Mutex * mt,
HWCryptoHook_CallerContext * cactx)
{
mt->lock = CRYPTO_THREAD_lock_new();
if (mt->lock == NULL)
if (mt->lock == NULL) {
HWCRHKerr(HWCRHK_F_HWCRHK_MUTEX_INIT, ERR_R_MALLOC_FAILURE);
return 1; /* failure */
}
return 0; /* success */
}

Expand Down
2 changes: 2 additions & 0 deletions engines/e_chil_err.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ static void ERR_HWCRHK_error(int function, int reason, char *file, int line);
# define HWCRHK_F_HWCRHK_MOD_EXP 107
# define HWCRHK_F_HWCRHK_RAND_BYTES 108
# define HWCRHK_F_HWCRHK_RSA_MOD_EXP 109
# define HWCRHK_F_BIND_HELPER 110
# define HWCRHK_F_HWCRHK_MUTEX_INIT 111

/* Reason codes. */
# define HWCRHK_R_ALREADY_LOADED 100
Expand Down

0 comments on commit b2b361f

Please sign in to comment.