Force ztest to always use /dev/urandom

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 <tim@chase2k.com>
Reviewed by: Thomas Caputi <tcaputi@datto.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #7017 
Closes #7036
This commit is contained in:
Brian Behlendorf 2018-01-12 09:36:26 -08:00 committed by GitHub
parent 6df9f8ebd7
commit e1a0850c35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 16 deletions

View File

@ -7064,7 +7064,12 @@ main(int argc, char **argv)
exit(EXIT_FAILURE); 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); ASSERT3S(ztest_fd_rand, >=, 0);
if (!fd_data_str) { if (!fd_data_str) {

View File

@ -630,6 +630,8 @@ extern void delay(clock_t ticks);
#define NN_NUMBUF_SZ (6) #define NN_NUMBUF_SZ (6)
extern uint64_t physmem; extern uint64_t physmem;
extern char *random_path;
extern char *urandom_path;
extern int highbit64(uint64_t i); extern int highbit64(uint64_t i);
extern int lowbit64(uint64_t i); extern int lowbit64(uint64_t i);

View File

@ -907,13 +907,15 @@ lowbit64(uint64_t i)
return (__builtin_ffsll(i)); return (__builtin_ffsll(i));
} }
char *random_path = "/dev/random";
char *urandom_path = "/dev/urandom";
static int random_fd = -1, urandom_fd = -1; static int random_fd = -1, urandom_fd = -1;
void void
random_init(void) random_init(void)
{ {
VERIFY((random_fd = open("/dev/random", O_RDONLY)) != -1); VERIFY((random_fd = open(random_path, O_RDONLY)) != -1);
VERIFY((urandom_fd = open("/dev/urandom", O_RDONLY)) != -1); VERIFY((urandom_fd = open(urandom_path, O_RDONLY)) != -1);
} }
void void

View File

@ -189,7 +189,6 @@ Requires: fio
Requires: acl Requires: acl
Requires: sudo Requires: sudo
Requires: sysstat Requires: sysstat
Requires: rng-tools
AutoReqProv: no AutoReqProv: no
%description test %description test

View File

@ -148,15 +148,6 @@ function store_core
fi fi
} }
rngdpid=""
function on_exit
{
if [ -n "$rngdpid" ]; then
kill -9 "$rngdpid"
fi
}
trap on_exit EXIT
# parse arguments # parse arguments
# expected format: zloop [-t timeout] [-c coredir] [-- extra ztest args] # expected format: zloop [-t timeout] [-c coredir] [-- extra ztest args]
coredir=$DEFAULTCOREDIR coredir=$DEFAULTCOREDIR
@ -205,9 +196,6 @@ or_die rm -f ztest.history
or_die rm -f ztest.ddt or_die rm -f ztest.ddt
or_die rm -f ztest.cores 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 ztrc=0 # ztest return value
foundcrashes=0 # number of crashes found so far foundcrashes=0 # number of crashes found so far
starttime=$(date +%s) starttime=$(date +%s)