diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2023-09-18 08:16:01 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2023-10-11 09:01:41 +0200 |
commit | aff2b761ba35778946ed521ac65ff4cb094c317f (patch) | |
tree | d97f75c3dd291315ae8876512ae870af5413b515 | |
parent | 3ecb534946e2d940fc8a145b06f976744f5dc234 (diff) |
Improve Malloc Failure Test
Allow 2 digits after the comma in percentage in OPENSSL_MALLOC_FAILURES.
Add OPENSSL_MALLOC_SEED to allow for some randomization.
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22127)
(cherry picked from commit 3df5736cf303d2c69654ba1c295a9772b738608e)
-rw-r--r-- | crypto/mem.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/crypto/mem.c b/crypto/mem.c index 40e4e90dd8..76779a461f 100644 --- a/crypto/mem.c +++ b/crypto/mem.c @@ -100,6 +100,9 @@ void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount) * or 100;100@25;0 * This means 100 mallocs succeed, then next 100 fail 25% of the time, and * all remaining (count is zero) succeed. + * The failure percentge can have 2 digits after the comma. For example: + * 0@0.01 + * This means 0.01% of all allocations will fail. */ static void parseit(void) { @@ -112,7 +115,7 @@ static void parseit(void) /* Get the count (atol will stop at the @ if there), and percentage */ md_count = atol(md_failstring); atsign = strchr(md_failstring, '@'); - md_fail_percent = atsign == NULL ? 0 : atoi(atsign + 1); + md_fail_percent = atsign == NULL ? 0 : (int)(atof(atsign + 1) * 100 + 0.5); if (semi != NULL) md_failstring = semi; @@ -131,7 +134,7 @@ static void parseit(void) */ static int shouldfail(void) { - int roll = (int)(random() % 100); + int roll = (int)(random() % 10000); int shoulditfail = roll < md_fail_percent; # ifndef _WIN32 /* suppressed on Windows as POSIX-like file descriptors are non-inheritable */ @@ -165,6 +168,8 @@ void ossl_malloc_setup_failures(void) parseit(); if ((cp = getenv("OPENSSL_MALLOC_FD")) != NULL) md_tracefd = atoi(cp); + if ((cp = getenv("OPENSSL_MALLOC_SEED")) != NULL) + srandom(atoi(cp)); } #endif |