util: unify how we see srand()
This commit is contained in:
parent
97768fc574
commit
ef309a681f
|
@ -480,7 +480,7 @@ int main(int argc, char *argv[]) {
|
|||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
srand(time(NULL));
|
||||
initialize_srand();
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
|
|
|
@ -2521,28 +2521,22 @@ int dev_urandom(void *p, size_t n) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void random_bytes(void *p, size_t n) {
|
||||
void initialize_srand(void) {
|
||||
static bool srand_called = false;
|
||||
uint8_t *q;
|
||||
int r;
|
||||
unsigned x;
|
||||
#ifdef HAVE_SYS_AUXV_H
|
||||
void *auxv;
|
||||
#endif
|
||||
|
||||
r = dev_urandom(p, n);
|
||||
if (r >= 0)
|
||||
if (srand_called)
|
||||
return;
|
||||
|
||||
/* If some idiot made /dev/urandom unavailable to us, he'll
|
||||
* get a PRNG instead. */
|
||||
|
||||
if (!srand_called) {
|
||||
unsigned x = 0;
|
||||
x = 0;
|
||||
|
||||
#ifdef HAVE_SYS_AUXV_H
|
||||
/* The kernel provides us with a bit of entropy in
|
||||
* auxv, so let's try to make use of that to seed the
|
||||
* pseudo-random generator. It's better than
|
||||
* nothing... */
|
||||
|
||||
void *auxv;
|
||||
/* The kernel provides us with a bit of entropy in auxv, so
|
||||
* let's try to make use of that to seed the pseudo-random
|
||||
* generator. It's better than nothing... */
|
||||
|
||||
auxv = (void*) getauxval(AT_RANDOM);
|
||||
if (auxv)
|
||||
|
@ -2554,7 +2548,20 @@ void random_bytes(void *p, size_t n) {
|
|||
|
||||
srand(x);
|
||||
srand_called = true;
|
||||
}
|
||||
}
|
||||
|
||||
void random_bytes(void *p, size_t n) {
|
||||
uint8_t *q;
|
||||
int r;
|
||||
|
||||
r = dev_urandom(p, n);
|
||||
if (r >= 0)
|
||||
return;
|
||||
|
||||
/* If some idiot made /dev/urandom unavailable to us, he'll
|
||||
* get a PRNG instead. */
|
||||
|
||||
initialize_srand();
|
||||
|
||||
for (q = p; q < (uint8_t*) p + n; q ++)
|
||||
*q = rand();
|
||||
|
|
|
@ -321,6 +321,7 @@ int make_console_stdio(void);
|
|||
|
||||
int dev_urandom(void *p, size_t n);
|
||||
void random_bytes(void *p, size_t n);
|
||||
void initialize_srand(void);
|
||||
|
||||
static inline uint64_t random_u64(void) {
|
||||
uint64_t u;
|
||||
|
|
|
@ -922,7 +922,7 @@ int main(int argc, char *argv[])
|
|||
goto exit;
|
||||
}
|
||||
|
||||
srand((unsigned int)getpid());
|
||||
initialize_srand();
|
||||
for (cnt = 20; cnt > 0; cnt--) {
|
||||
struct timespec duration;
|
||||
|
||||
|
|
|
@ -861,7 +861,7 @@ int scsi_get_serial(struct udev *udev,
|
|||
int retval;
|
||||
|
||||
memzero(dev_scsi->serial, len);
|
||||
srand((unsigned int)getpid());
|
||||
initialize_srand();
|
||||
for (cnt = 20; cnt > 0; cnt--) {
|
||||
struct timespec duration;
|
||||
|
||||
|
|
Loading…
Reference in a new issue