Skip to content

Commit

Permalink
Fix potential divide by zero error
Browse files Browse the repository at this point in the history
Coverity caught the following issues:
1591477
1591475
1591473
1591470

all of which are simmilar, in that they catch potential divide by zero
in double values.  It can't actually happen since the the threads which
increment these counters don't exit until they reach non-zero values,
but its easy to add the checks, so lets do that to ensure that we don't
change something in the future that causes it.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from #23462)
  • Loading branch information
nhorman authored and paulidale committed Apr 24, 2024
1 parent 264ff64 commit d092208
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions test/threadstest.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,11 @@ static int _torture_rw(void)
TEST_info("performed %d reads and %d writes over 2 read and 2 write threads in %e seconds",
rwreader1_iterations + rwreader2_iterations,
rwwriter1_iterations + rwwriter2_iterations, tottime);
if ((rwreader1_iterations + rwreader2_iterations == 0)
|| (rwwriter1_iterations + rwwriter2_iterations == 0)) {
TEST_info("Threads did not iterate\n");
goto out;
}
avr = tottime / (rwreader1_iterations + rwreader2_iterations);
avw = (tottime / (rwwriter1_iterations + rwwriter2_iterations));
TEST_info("Average read time %e/read", avr);
Expand Down Expand Up @@ -405,6 +410,7 @@ static int _torture_rcu(void)
struct timeval dtime;
double tottime;
double avr, avw;
int rc = 0;

atomiclock = CRYPTO_THREAD_lock_new();
memset(&writer1, 0, sizeof(thread_t));
Expand Down Expand Up @@ -432,7 +438,7 @@ static int _torture_rcu(void)
|| !TEST_true(wait_for_thread(writer2))
|| !TEST_true(wait_for_thread(reader1))
|| !TEST_true(wait_for_thread(reader2)))
return 0;
goto out;

t2 = ossl_time_now();
dtime = ossl_time_to_timeval(ossl_time_subtract(t2, t1));
Expand All @@ -441,17 +447,27 @@ static int _torture_rcu(void)
TEST_info("performed %d reads and %d writes over 2 read and 2 write threads in %e seconds",
reader1_iterations + reader2_iterations,
writer1_iterations + writer2_iterations, tottime);
if ((reader1_iterations + reader2_iterations == 0)
|| (writer1_iterations + writer2_iterations == 0)) {
TEST_info("Threads did not iterate\n");
goto out;
}
avr = tottime / (reader1_iterations + reader2_iterations);
avw = tottime / (writer1_iterations + writer2_iterations);
TEST_info("Average read time %e/read", avr);
TEST_info("Average write time %e/write", avw);

if (!TEST_int_eq(rcu_torture_result, 1))
goto out;

rc = 1;
out:
ossl_rcu_lock_free(rcu_lock);
CRYPTO_THREAD_lock_free(atomiclock);
if (!TEST_int_eq(rcu_torture_result, 1))
return 0;

return 1;
return rc;
}

static int torture_rcu_low(void)
Expand Down

0 comments on commit d092208

Please sign in to comment.