Skip to content

Commit

Permalink
Force ztest to always use /dev/urandom
Browse files Browse the repository at this point in the history
For ztest, which is solely for testing, using a pseudo random
is entirely reasonable.  Using /dev/urandom ensures the system
entropy pool doesn't get depleted thus stalling the testing.
This is a particular problem when testing in VMs.

Reviewed-by: Tim Chase <[email protected]>
Reviewed by: Thomas Caputi <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #7017 
Closes #7036
  • Loading branch information
behlendorf authored Jan 12, 2018
1 parent 6df9f8e commit e1a0850
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 16 deletions.
7 changes: 6 additions & 1 deletion cmd/ztest/ztest.c
Original file line number Diff line number Diff line change
Expand Up @@ -7064,7 +7064,12 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}

ztest_fd_rand = open("/dev/urandom", O_RDONLY);
/*
* Force random_get_bytes() to use /dev/urandom in order to prevent
* ztest from needlessly depleting the system entropy pool.
*/
random_path = "/dev/urandom";
ztest_fd_rand = open(random_path, O_RDONLY);
ASSERT3S(ztest_fd_rand, >=, 0);

if (!fd_data_str) {
Expand Down
2 changes: 2 additions & 0 deletions include/sys/zfs_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,8 @@ extern void delay(clock_t ticks);
#define NN_NUMBUF_SZ (6)

extern uint64_t physmem;
extern char *random_path;
extern char *urandom_path;

extern int highbit64(uint64_t i);
extern int lowbit64(uint64_t i);
Expand Down
6 changes: 4 additions & 2 deletions lib/libzpool/kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -907,13 +907,15 @@ lowbit64(uint64_t i)
return (__builtin_ffsll(i));
}

char *random_path = "/dev/random";
char *urandom_path = "/dev/urandom";
static int random_fd = -1, urandom_fd = -1;

void
random_init(void)
{
VERIFY((random_fd = open("/dev/random", O_RDONLY)) != -1);
VERIFY((urandom_fd = open("/dev/urandom", O_RDONLY)) != -1);
VERIFY((random_fd = open(random_path, O_RDONLY)) != -1);
VERIFY((urandom_fd = open(urandom_path, O_RDONLY)) != -1);
}

void
Expand Down
1 change: 0 additions & 1 deletion rpm/generic/zfs.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ Requires: fio
Requires: acl
Requires: sudo
Requires: sysstat
Requires: rng-tools
AutoReqProv: no

%description test
Expand Down
12 changes: 0 additions & 12 deletions scripts/zloop.sh
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,6 @@ function store_core
fi
}

rngdpid=""
function on_exit
{
if [ -n "$rngdpid" ]; then
kill -9 "$rngdpid"
fi
}
trap on_exit EXIT

# parse arguments
# expected format: zloop [-t timeout] [-c coredir] [-- extra ztest args]
coredir=$DEFAULTCOREDIR
Expand Down Expand Up @@ -205,9 +196,6 @@ or_die rm -f ztest.history
or_die rm -f ztest.ddt
or_die rm -f ztest.cores

# start rngd in the background so we don't run out of entropy
or_die read -r rngdpid < <(rngd -f -r /dev/urandom & echo $!)

ztrc=0 # ztest return value
foundcrashes=0 # number of crashes found so far
starttime=$(date +%s)
Expand Down

0 comments on commit e1a0850

Please sign in to comment.