Fix for async TLS v1.3 with multiple WC_PENDING_E on client_hello and server_hello processing. Fix for not aligned NUMA.

This commit is contained in:
David Garske
2021-10-22 16:28:46 -07:00
parent 34095dfd38
commit eb56b652ca
3 changed files with 17 additions and 7 deletions

View File

@@ -3276,9 +3276,14 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
ret = wolfSSL_AsyncPop(ssl, &ssl->options.asyncState); ret = wolfSSL_AsyncPop(ssl, &ssl->options.asyncState);
if (ret != WC_NOT_PENDING_E) { if (ret != WC_NOT_PENDING_E) {
/* Check for error */ /* Check for error */
if (ret < 0) if (ret < 0) {
if (ret == WC_PENDING_E) {
/* Mark message as not received so it can process again */
ssl->msgsReceived.got_server_hello--;
}
return ret; return ret;
} }
}
else else
#endif #endif
{ {
@@ -4533,8 +4538,9 @@ int DoTls13ClientHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
ret = wolfSSL_AsyncPop(ssl, &ssl->options.asyncState); ret = wolfSSL_AsyncPop(ssl, &ssl->options.asyncState);
if (ret != WC_NOT_PENDING_E) { if (ret != WC_NOT_PENDING_E) {
/* Check for error */ /* Check for error */
if (ret < 0) if (ret < 0) {
return ret; goto exit_dch;
}
} }
else else
#endif #endif

View File

@@ -1783,6 +1783,10 @@ void* wc_CryptoCb_IntelQaRealloc(void *ptr, size_t size, void* heap, int type
if (newIsNuma == 0 && ptrIsNuma == 0) { if (newIsNuma == 0 && ptrIsNuma == 0) {
allocNew = 1; allocNew = 1;
} }
/* confirm input is aligned, otherwise allocate new */
else if (((size_t)ptr % WOLF_HEADER_ALIGN) != 0) {
allocNew = 1;
}
/* if matching NUMA type and size fits, use existing */ /* if matching NUMA type and size fits, use existing */
else if (newIsNuma == ptrIsNuma && header->size >= size) { else if (newIsNuma == ptrIsNuma && header->size >= size) {