diff --git a/noise.c b/noise.c index a094d25e..8ae0f987 100644 --- a/noise.c +++ b/noise.c @@ -40,6 +40,8 @@ void noise_get_heavy(void (*func) (void *, int)) } read_random_seed(func); + /* Update the seed immediately, in case another instance uses it. */ + random_save_seed(); gsps = NULL; mod = GetModuleHandle("KERNEL32"); @@ -56,6 +58,7 @@ void random_save_seed(void) if (random_active) { random_get_savedata(&data, &len); write_random_seed(data, len); + sfree(data); } } diff --git a/sshrand.c b/sshrand.c index 7c401af4..95c7b492 100644 --- a/sshrand.c +++ b/sshrand.c @@ -201,7 +201,10 @@ int random_byte(void) void random_get_savedata(void **data, int *len) { + void *buf = smalloc(POOLSIZE / 2); random_stir(); - *data = pool.pool + pool.poolpos; + memcpy(buf, pool.pool + pool.poolpos, POOLSIZE / 2); *len = POOLSIZE / 2; + *data = buf; + random_stir(); }