diff --git a/.github/workflows/trackmemory.yml b/.github/workflows/trackmemory.yml index 4def1759d..0c9f44cb4 100644 --- a/.github/workflows/trackmemory.yml +++ b/.github/workflows/trackmemory.yml @@ -27,6 +27,7 @@ jobs: # # Note, don't combine wolfEntropy with the full TLS cipher suite test -- the implicit wc_InitRng()s in each suite have an enormous CPU footprint. '--enable-wolfEntropy --enable-smallstackcache --enable-smallstack --enable-all CFLAGS="-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"', + '--enable-intelrdseed --enable-smallstackcache --enable-smallstack --enable-all CFLAGS="-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"', '--enable-amdrand --enable-smallstackcache --enable-smallstack --enable-all CFLAGS="-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"', '--disable-asm --enable-wolfEntropy --enable-smallstackcache --enable-smallstack --enable-all CFLAGS="-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"' ] diff --git a/tests/api.c b/tests/api.c index e4bb7d560..39e6f5ea3 100644 --- a/tests/api.c +++ b/tests/api.c @@ -22832,8 +22832,6 @@ static int test_wolfSSL_EVP_Cipher_extra(void) set_plain(plain, BUFFSZ * RECORDS); - SSL_library_init(); - ExpectNotNull(evp = EVP_CIPHER_CTX_new()); ExpectIntNE((ret = EVP_CipherInit(evp, type, NULL, iv, 0)), 0); @@ -41503,8 +41501,6 @@ TEST_CASE testCases[] = { TEST_MLDSA_DECLS, /* Signature API */ TEST_SIGNATURE_DECLS, - /* x509 */ - TEST_X509_DECLS, /* ASN */ TEST_ASN_DECLS, @@ -41562,6 +41558,9 @@ TEST_CASE testCases[] = { TEST_DECL(test_wolfSSL_Init), + /* x509 -- must appear after test_wolfSSL_Init(). */ + TEST_X509_DECLS, + TEST_DECL(test_dual_alg_support), TEST_DECL(test_dual_alg_crit_ext_support), diff --git a/tests/api/test_random.c b/tests/api/test_random.c index fa7c820c9..3b586559f 100644 --- a/tests/api/test_random.c +++ b/tests/api/test_random.c @@ -327,7 +327,7 @@ int test_wc_RNG_TestSeed(void) #if defined(HAVE_HASHDRBG) && \ (!(defined(HAVE_FIPS) || defined(HAVE_SELFTEST)) || \ (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2))) - byte seed[16]; + byte seed[32]; byte i; #ifdef TEST_WC_RNG_TESTSEED_BAD_PARAMS diff --git a/tests/quic.c b/tests/quic.c index f3144b096..8fc5d5c43 100644 --- a/tests/quic.c +++ b/tests/quic.c @@ -1892,6 +1892,12 @@ int QuicTest(void) int ret = 0; #ifdef WOLFSSL_QUIC int verbose = 0; + + if (wolfSSL_Init() != WOLFSSL_SUCCESS) { + printf("wolfSSL_Init() failed in QuicTest()."); + return -1; + } + printf(" Begin QUIC Tests\n"); if ((ret = test_set_quic_method()) != TEST_SUCCESS) goto leave; @@ -1917,6 +1923,8 @@ leave: printf(" FAILED: some tests did not pass.\n"); } printf(" End QUIC Tests\n"); + + (void)wolfSSL_Cleanup(); #endif return ret == TEST_SUCCESS ? 0 : -1; } diff --git a/tests/unit.c b/tests/unit.c index 72c51f4ec..820388d6e 100644 --- a/tests/unit.c +++ b/tests/unit.c @@ -273,6 +273,7 @@ int unit_test(int argc, char** argv) } printf("wolfCrypt unit test completed successfully.\n\n"); + fflush(stdout); } #endif @@ -282,6 +283,7 @@ int unit_test(int argc, char** argv) { if (apiTesting) { ret = ApiTest(); + fflush(stdout); if (ret != 0) goto exit; } @@ -291,20 +293,25 @@ int unit_test(int argc, char** argv) } #ifdef WOLFSSL_W64_WRAPPER - if ((ret = w64wrapper_test()) != 0) { + ret = w64wrapper_test(); + fflush(stdout); + if (ret != 0) { fprintf(stderr, "w64wrapper test failed with %d\n", ret); goto exit; } #endif /* WOLFSSL_W64_WRAPPER */ #ifdef WOLFSSL_QUIC - if ((ret = QuicTest()) != 0) { + ret = QuicTest(); + fflush(stdout); + if (ret != 0) { fprintf(stderr, "quic test failed with %d\n", ret); goto exit; } #endif SrpTest(); + fflush(stdout); } #if !defined(NO_WOLFSSL_CIPHER_SUITE_TEST) && \ @@ -326,10 +333,18 @@ exit: #ifdef WOLFSSL_TRACK_MEMORY if (ret == 0) { - (void)wolfSSL_Cleanup(); + ret = wolfSSL_Cleanup(); /* no-op in a successful full run. */ + + if (ret == WOLFSSL_SUCCESS) + ret = 0; + else + fprintf(stderr, "wolfSSL_Cleanup() returned %d\n", ret); + if (wc_MemStats_Ptr->currentBytes > 0) { - fprintf(stderr, "WOLFSSL_TRACK_MEMORY: currentBytes after cleanup is %ld\n", wc_MemStats_Ptr->currentBytes); + fprintf(stderr, + "WOLFSSL_TRACK_MEMORY: currentBytes after cleanup is %ld\n", + wc_MemStats_Ptr->currentBytes); ret = MEMORY_E; } } diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 8ae657436..f10242742 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -19693,7 +19693,9 @@ static wc_test_ret_t _rng_test(WC_RNG* rng) return WC_TEST_RET_ENC_EC(ret); } -#if defined(HAVE_HASHDRBG) && !defined(CUSTOM_RAND_GENERATE_BLOCK) +#if defined(HAVE_HASHDRBG) && !defined(HAVE_INTEL_RDRAND) && \ + !defined(CUSTOM_RAND_GENERATE_BLOCK) && \ + !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION3_GE(5,0,0)) /* Test periodic reseed dynamics. */ ((struct DRBG_internal *)rng->drbg)->reseedCtr = WC_RESEED_INTERVAL; @@ -19704,7 +19706,7 @@ static wc_test_ret_t _rng_test(WC_RNG* rng) if (((struct DRBG_internal *)rng->drbg)->reseedCtr == WC_RESEED_INTERVAL) return WC_TEST_RET_ENC_NC; -#endif /* HAVE_HASHDRBG && !CUSTOM_RAND_GENERATE_BLOCK */ +#endif /* HAVE_HASHDRBG && !CUSTOM_RAND_GENERATE_BLOCK && !HAVE_SELFTEST */ #if defined(WOLFSSL_TRACK_MEMORY) && defined(WOLFSSL_SMALL_STACK_CACHE) /* wc_RNG_GenerateBlock() must not allocate any memory in @@ -19797,7 +19799,8 @@ static wc_test_ret_t random_rng_test(void) return ret; } -#if defined(HAVE_HASHDRBG) && !defined(CUSTOM_RAND_GENERATE_BLOCK) +#if defined(HAVE_HASHDRBG) && !defined(CUSTOM_RAND_GENERATE_BLOCK) && \ + !defined(HAVE_INTEL_RDRAND) #if defined(WC_RNG_SEED_CB) && \ !(defined(ENTROPY_SCALE_FACTOR) || defined(SEED_BLOCK_SZ)) @@ -19940,7 +19943,7 @@ static wc_test_ret_t rng_seed_test(void) out: return ret; } -#endif /* WC_RNG_SEED_CB) && !(ENTROPY_SCALE_FACTOR || SEED_BLOCK_SZ) */ +#endif /* WC_RNG_SEED_CB && !(ENTROPY_SCALE_FACTOR || SEED_BLOCK_SZ) */ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_test(void) @@ -20060,7 +20063,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_test(void) return 0; } -#else +#else /* !HAVE_HASHDRBG || CUSTOM_RAND_GENERATE_BLOCK || HAVE_INTEL_RDRAND */ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_test(void) { @@ -20070,7 +20073,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_test(void) return random_rng_test(); } -#endif /* HAVE_HASHDRBG && !CUSTOM_RAND_GENERATE_BLOCK */ +#endif /* !HAVE_HASHDRBG || CUSTOM_RAND_GENERATE_BLOCK || HAVE_INTEL_RDRAND */ #endif /* WC_NO_RNG */ #ifndef MEM_TEST_SZ diff --git a/wolfssl/wolfcrypt/mem_track.h b/wolfssl/wolfcrypt/mem_track.h index 300c41cc0..8dcfee8b3 100644 --- a/wolfssl/wolfcrypt/mem_track.h +++ b/wolfssl/wolfcrypt/mem_track.h @@ -83,6 +83,8 @@ #define DO_MEM_LIST #endif +struct memoryList; + typedef struct memoryStats { long totalAllocs; /* number of allocations */ long totalDeallocs; /* number of deallocations */ @@ -98,6 +100,9 @@ typedef struct memoryStats { * by wolfCrypt_heap_peak_checkpoint() */ #endif +#ifdef DO_MEM_LIST + struct memoryList *memList; +#endif } memoryStats; typedef struct memHint { @@ -380,6 +385,7 @@ static WC_INLINE int InitMemoryTracker(void) #ifdef DO_MEM_LIST XMEMSET(&ourMemList, 0, sizeof(ourMemList)); + ourMemStats.memList = &ourMemList; pthread_mutex_unlock(&memLock); #endif diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 2f916b2c0..12a197615 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -4323,6 +4323,13 @@ extern void uITRON4_free(void *p) ; without staticmemory (WOLFSSL_STATIC_MEMORY) #endif +/* Undefine WOLFSSL_SMALL_STACK_CACHE if WOLFSSL_SMALL_STACK is undefined -- + * they only work together. + */ +#if defined(WOLFSSL_SMALL_STACK_CACHE) && !defined(WOLFSSL_SMALL_STACK) + #undef WOLFSSL_SMALL_STACK_CACHE +#endif + /* If malloc is disabled make sure it is also disabled in SP math */ #if defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_SP_NO_MALLOC) && \ (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL))