diff --git a/random/rand-internal.h b/random/rand-internal.h --- a/random/rand-internal.h +++ b/random/rand-internal.h @@ -132,6 +132,7 @@ enum random_origins origin, size_t length); void _gcry_rndjent_dump_stats (void); +void _gcry_rndjent_fini (void); /*-- rndhw.c --*/ int _gcry_rndhw_failed_p (void); diff --git a/random/rndjent.c b/random/rndjent.c --- a/random/rndjent.c +++ b/random/rndjent.c @@ -369,3 +369,20 @@ } #endif /*USE_JENT*/ } + + +void +_gcry_rndjent_fini (void) +{ +#ifdef USE_JENT + lock_rng (); + + if (jent_rng_is_initialized) + { + jent_entropy_collector_free (jent_rng_collector); + jent_rng_collector = NULL; + } + + unlock_rng (); +#endif +} diff --git a/random/rndlinux.c b/random/rndlinux.c --- a/random/rndlinux.c +++ b/random/rndlinux.c @@ -150,6 +150,8 @@ close (fd_urandom); fd_urandom = -1; } + + _gcry_rndjent_fini (); return 0; }