summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2023-09-18 08:16:01 +0200
committerTomas Mraz <tomas@openssl.org>2023-10-11 09:01:51 +0200
commit1eeada08525183c79963b11af0288de3e52c1ea4 (patch)
treeb86becfa155302e21d660603a0ab882d60a0d28c
parentf5fb3acc1f4dd97bdc475e27938108b4cc4bd7b0 (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.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/crypto/mem.c b/crypto/mem.c
index bc9dc11167..ef0b744049 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