提交 50718243 编写于 作者: R Rich Salz

Fix "failure rate" bugs

Reviewed-by: NEmilia Käsper <emilia@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2228)
上级 37b8f1e2
...@@ -32,7 +32,7 @@ static void (*free_impl)(void *, const char *, int) ...@@ -32,7 +32,7 @@ static void (*free_impl)(void *, const char *, int)
#ifndef OPENSSL_NO_CRYPTO_MDEBUG #ifndef OPENSSL_NO_CRYPTO_MDEBUG
static char *md_failstring; static char *md_failstring;
static long md_count; static long md_count;
static int md_percent = 100; static int md_fail_percent = 0;
static int md_tracefd = -1; static int md_tracefd = -1;
static int call_malloc_debug = 1; static int call_malloc_debug = 1;
...@@ -89,7 +89,8 @@ void CRYPTO_get_mem_functions( ...@@ -89,7 +89,8 @@ void CRYPTO_get_mem_functions(
* Parse a "malloc failure spec" string. This likes like a set of fields * Parse a "malloc failure spec" string. This likes like a set of fields
* separated by semicolons. Each field has a count and an optional failure * separated by semicolons. Each field has a count and an optional failure
* percentage. For example: * percentage. For example:
* 100;100@25;@100 * 100@0;100@25;0@0
* or 100;100@25;0
* This means 100 mallocs succeed, then next 100 fail 25% of the time, and * This means 100 mallocs succeed, then next 100 fail 25% of the time, and
* all remaining (count is zero) succeed. * all remaining (count is zero) succeed.
*/ */
...@@ -104,7 +105,7 @@ static void parseit(void) ...@@ -104,7 +105,7 @@ static void parseit(void)
/* Get the count (atol will stop at the @ if there), and percentage */ /* Get the count (atol will stop at the @ if there), and percentage */
md_count = atol(md_failstring); md_count = atol(md_failstring);
atsign = strchr(md_failstring, '@'); atsign = strchr(md_failstring, '@');
md_percent = atsign == NULL ? 100 : atoi(atsign + 1); md_fail_percent = atsign == NULL ? 0 : atoi(atsign + 1);
if (semi != NULL) if (semi != NULL)
md_failstring = semi; md_failstring = semi;
...@@ -116,13 +117,13 @@ static void parseit(void) ...@@ -116,13 +117,13 @@ static void parseit(void)
static int shouldfail(void) static int shouldfail(void)
{ {
int roll = (int)(random() % 100); int roll = (int)(random() % 100);
int shouldfail = roll > md_percent; int shouldfail = roll < md_fail_percent;
char buff[80]; char buff[80];
if (md_tracefd > 0) { if (md_tracefd > 0) {
BIO_snprintf(buff, sizeof(buff), BIO_snprintf(buff, sizeof(buff),
"%c C%ld %%%d R%d\n", "%c C%ld %%%d R%d\n",
shouldfail ? '-' : '+', md_count, md_percent, roll); shouldfail ? '-' : '+', md_count, md_fail_percent, roll);
write(md_tracefd, buff, strlen(buff)); write(md_tracefd, buff, strlen(buff));
#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE #ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
if (shouldfail) { if (shouldfail) {
......
...@@ -152,8 +152,8 @@ B<OPENSSL_MALLOC_FAILURES> controls how often allocations should fail. ...@@ -152,8 +152,8 @@ B<OPENSSL_MALLOC_FAILURES> controls how often allocations should fail.
It is a set of fields separated by semicolons, which each field is a count It is a set of fields separated by semicolons, which each field is a count
(defaulting to zero) and an optional atsign and percentage (defaulting (defaulting to zero) and an optional atsign and percentage (defaulting
to 100). If the count is zero, then it lasts forever. For example, to 100). If the count is zero, then it lasts forever. For example,
C<100;@25> means the first 100 allocations pass, then all other allocations C<100;@25> or C<100@0;0@25> means the first 100 allocations pass, then all
(until the program exits or crashes) have the rest have a 25% chance of other allocations (until the program exits or crashes) have a 25% chance of
failing. failing.
If the variable B<OPENSSL_MALLOC_FD> is parsed as a positive integer, then If the variable B<OPENSSL_MALLOC_FD> is parsed as a positive integer, then
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册