Move chil engine to the new thread api
Move the chil engine to use the new thread API. As I don't have access to the hardware I can't test this :-(. I think its ok... Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
40e068d506
commit
0231a02963
@ -94,6 +94,8 @@
|
|||||||
# define HWCRHK_LIB_NAME "CHIL engine"
|
# define HWCRHK_LIB_NAME "CHIL engine"
|
||||||
# include "e_chil_err.c"
|
# include "e_chil_err.c"
|
||||||
|
|
||||||
|
static CRYPTO_RWLOCK *chil_lock;
|
||||||
|
|
||||||
static int hwcrhk_destroy(ENGINE *e);
|
static int hwcrhk_destroy(ENGINE *e);
|
||||||
static int hwcrhk_init(ENGINE *e);
|
static int hwcrhk_init(ENGINE *e);
|
||||||
static int hwcrhk_finish(ENGINE *e);
|
static int hwcrhk_finish(ENGINE *e);
|
||||||
@ -355,6 +357,11 @@ static int bind_helper(ENGINE *e)
|
|||||||
# ifndef OPENSSL_NO_DH
|
# ifndef OPENSSL_NO_DH
|
||||||
const DH_METHOD *meth2;
|
const DH_METHOD *meth2;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
chil_lock = CRYPTO_THREAD_lock_new();
|
||||||
|
if (chil_lock == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!ENGINE_set_id(e, engine_hwcrhk_id) ||
|
if (!ENGINE_set_id(e, engine_hwcrhk_id) ||
|
||||||
!ENGINE_set_name(e, engine_hwcrhk_name) ||
|
!ENGINE_set_name(e, engine_hwcrhk_name) ||
|
||||||
# ifndef OPENSSL_NO_RSA
|
# ifndef OPENSSL_NO_RSA
|
||||||
@ -398,6 +405,7 @@ static int bind_helper(ENGINE *e)
|
|||||||
|
|
||||||
/* Ensure the hwcrhk error handling is set up */
|
/* Ensure the hwcrhk error handling is set up */
|
||||||
ERR_load_HWCRHK_strings();
|
ERR_load_HWCRHK_strings();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,6 +534,7 @@ static int hwcrhk_destroy(ENGINE *e)
|
|||||||
{
|
{
|
||||||
free_HWCRHK_LIBNAME();
|
free_HWCRHK_LIBNAME();
|
||||||
ERR_unload_HWCRHK_strings();
|
ERR_unload_HWCRHK_strings();
|
||||||
|
CRYPTO_THREAD_lock_free(chil_lock);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -681,32 +690,32 @@ static int hwcrhk_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
|
|||||||
{
|
{
|
||||||
BIO *bio = (BIO *)p;
|
BIO *bio = (BIO *)p;
|
||||||
|
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
BIO_free(logstream);
|
BIO_free(logstream);
|
||||||
logstream = NULL;
|
logstream = NULL;
|
||||||
if (CRYPTO_add(&bio->references, 1, CRYPTO_LOCK_BIO) > 1)
|
if (BIO_up_ref(bio)
|
||||||
logstream = bio;
|
logstream = bio;
|
||||||
else
|
else
|
||||||
HWCRHKerr(HWCRHK_F_HWCRHK_CTRL, HWCRHK_R_BIO_WAS_FREED);
|
HWCRHKerr(HWCRHK_F_HWCRHK_CTRL, HWCRHK_R_BIO_WAS_FREED);
|
||||||
}
|
}
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
case ENGINE_CTRL_SET_PASSWORD_CALLBACK:
|
case ENGINE_CTRL_SET_PASSWORD_CALLBACK:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
password_context.password_callback = (pem_password_cb *)f;
|
password_context.password_callback = (pem_password_cb *)f;
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
case ENGINE_CTRL_SET_USER_INTERFACE:
|
case ENGINE_CTRL_SET_USER_INTERFACE:
|
||||||
case HWCRHK_CMD_SET_USER_INTERFACE:
|
case HWCRHK_CMD_SET_USER_INTERFACE:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
password_context.ui_method = (UI_METHOD *)p;
|
password_context.ui_method = (UI_METHOD *)p;
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
case ENGINE_CTRL_SET_CALLBACK_DATA:
|
case ENGINE_CTRL_SET_CALLBACK_DATA:
|
||||||
case HWCRHK_CMD_SET_CALLBACK_DATA:
|
case HWCRHK_CMD_SET_CALLBACK_DATA:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
password_context.callback_data = p;
|
password_context.callback_data = p;
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* this enables or disables the "SimpleForkCheck" flag used in the
|
* this enables or disables the "SimpleForkCheck" flag used in the
|
||||||
@ -714,12 +723,12 @@ static int hwcrhk_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
|
|||||||
*/
|
*/
|
||||||
case ENGINE_CTRL_CHIL_SET_FORKCHECK:
|
case ENGINE_CTRL_CHIL_SET_FORKCHECK:
|
||||||
case HWCRHK_CMD_FORK_CHECK:
|
case HWCRHK_CMD_FORK_CHECK:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
if (i)
|
if (i)
|
||||||
hwcrhk_globals.flags |= HWCryptoHook_InitFlags_SimpleForkCheck;
|
hwcrhk_globals.flags |= HWCryptoHook_InitFlags_SimpleForkCheck;
|
||||||
else
|
else
|
||||||
hwcrhk_globals.flags &= ~HWCryptoHook_InitFlags_SimpleForkCheck;
|
hwcrhk_globals.flags &= ~HWCryptoHook_InitFlags_SimpleForkCheck;
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* This will prevent the initialisation function from "installing"
|
* This will prevent the initialisation function from "installing"
|
||||||
@ -729,14 +738,14 @@ static int hwcrhk_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
|
|||||||
* applications not using multithreading.
|
* applications not using multithreading.
|
||||||
*/
|
*/
|
||||||
case ENGINE_CTRL_CHIL_NO_LOCKING:
|
case ENGINE_CTRL_CHIL_NO_LOCKING:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
disable_mutex_callbacks = 1;
|
disable_mutex_callbacks = 1;
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
case HWCRHK_CMD_THREAD_LOCKING:
|
case HWCRHK_CMD_THREAD_LOCKING:
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_write_lock(chil_lock);
|
||||||
disable_mutex_callbacks = ((i == 0) ? 0 : 1);
|
disable_mutex_callbacks = ((i == 0) ? 0 : 1);
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_THREAD_unlock(chil_lock);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* The command isn't understood by this engine */
|
/* The command isn't understood by this engine */
|
||||||
@ -1297,13 +1306,11 @@ static void hwcrhk_log_message(void *logstr, const char *message)
|
|||||||
{
|
{
|
||||||
BIO *lstream = NULL;
|
BIO *lstream = NULL;
|
||||||
|
|
||||||
CRYPTO_w_lock(CRYPTO_LOCK_BIO);
|
|
||||||
if (logstr)
|
if (logstr)
|
||||||
lstream = *(BIO **)logstr;
|
lstream = *(BIO **)logstr;
|
||||||
if (lstream) {
|
if (lstream) {
|
||||||
BIO_printf(lstream, "%s\n", message);
|
BIO_printf(lstream, "%s\n", message);
|
||||||
}
|
}
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_BIO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user