diff --git a/src/internal.c b/src/internal.c index 39fc8fdf7..8bc7cdd1f 100644 --- a/src/internal.c +++ b/src/internal.c @@ -7624,6 +7624,12 @@ int AllocKey(WOLFSSL* ssl, int type, void** pKey) /* Sanity check key destination */ if (*pKey != NULL) { WOLFSSL_MSG("Key already present!"); + #ifdef WOLFSSL_ASYNC_CRYPT + /* allow calling this again for async reentry */ + if (ssl->error == WC_PENDING_E) { + return 0; + } + #endif return BAD_STATE_E; } @@ -38891,14 +38897,17 @@ int wolfSSL_AsyncPop(WOLFSSL* ssl, byte* state) XMEMSET(&asyncDev->event, 0, sizeof(WOLF_EVENT)); ssl->asyncDev = NULL; } - #if !defined(WOLFSSL_ASYNC_CRYPT_SW) && \ - (defined(WOLF_CRYPTO_CB) || defined(HAVE_PK_CALLBACKS)) + /* for crypto or PK callback, if pending remove from queue */ + #if (defined(WOLF_CRYPTO_CB) || defined(HAVE_PK_CALLBACKS)) && \ + !defined(WOLFSSL_ASYNC_CRYPT_SW) && !defined(HAVE_INTEL_QA) && \ + !defined(HAVE_CAVIUM) else if (ret == WC_PENDING_E) { /* Allow the underlying crypto API to be called again to trigger the * crypto or PK callback. The actual callback must be called, since * the completion is not detected in the poll like Intel QAT or * Nitrox */ ret = wolfEventQueue_Remove(&ssl->ctx->event_queue, event); + } #endif } diff --git a/tests/api.c b/tests/api.c index cac34e717..fca5c1d5d 100644 --- a/tests/api.c +++ b/tests/api.c @@ -36008,7 +36008,8 @@ static int test_wolfSSL_CTX_add_client_CA(void) #endif /* OPENSSL_EXTRA && !NO_RSA && !NO_CERTS && !NO_WOLFSSL_CLIENT */ return EXPECT_RESULT(); } -#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) +#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) && \ + defined(HAVE_IO_TESTS_DEPENDENCIES) static THREAD_RETURN WOLFSSL_THREAD server_task_ech(void* args) { callback_functions* callbacks = ((func_args*)args)->callbacks; @@ -68190,7 +68191,8 @@ TEST_CASE testCases[] = { TEST_DECL(test_wolfSSL_wolfSSL_UseSecureRenegotiation), TEST_DECL(test_wolfSSL_SCR_Reconnect), TEST_DECL(test_tls_ext_duplicate), -#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) +#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) && \ + defined(HAVE_IO_TESTS_DEPENDENCIES) TEST_DECL(test_wolfSSL_Tls13_ECH_params), /* Uses Assert in handshake callback. */ TEST_DECL(test_wolfSSL_Tls13_ECH),