rand_key: fix non-randomness in rand_key()
If rand_key() is called twive within the same second it would return the same key both times. Not very random. Redo how rand_key() works to make it more likely to be random and more likely that two consequtive calls do not yield the same result. Reported-by: CyberLoiter <yanming.xiao@gmail.com> Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@@ -220,17 +221,20 @@ struct scsi_command_descriptor *get_command_descriptor(int opcode, int sa);
|
|||||||
|
|
||||||
static inline long rand_key(void)
|
static inline long rand_key(void)
|
||||||
{
|
{
|
||||||
time_t t;
|
static int seed = 0;
|
||||||
pid_t p;
|
|
||||||
unsigned int s;
|
|
||||||
long l;
|
|
||||||
|
|
||||||
(void)time(&t);
|
if (!seed) {
|
||||||
p = getpid();
|
struct timeval tv;
|
||||||
s = ((int)p * (t & 0xffff));
|
pid_t p;
|
||||||
srandom(s);
|
unsigned int s;
|
||||||
l = random();
|
|
||||||
return l;
|
gettimeofday(&tv, NULL);
|
||||||
|
p = getpid();
|
||||||
|
s = p ^ tv.tv_sec ^ tv.tv_usec;
|
||||||
|
srandom(s);
|
||||||
|
}
|
||||||
|
seed = 1;
|
||||||
|
return random();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int pr_type_is_all_registrants(
|
static inline int pr_type_is_all_registrants(
|
||||||
|
|||||||
Reference in New Issue
Block a user