hwrng: Clean up RNG list when last hwrng is unregisterd
diff mbox

Message ID 151311717859.2551.8429053600468961607.stgit@sosxen2.amd.com
State Changes Requested
Delegated to: Herbert Xu
Headers show

Commit Message

Gary R Hook Dec. 12, 2017, 10:19 p.m. UTC
Commit 142a27f0a731 added support for a "best" RNG, and in doing so
introduced a hang from rmmod/modprobe -r when the last RNG on the list
was unloaded.

When the hwrng list is depleted, return the global variables to their
original state and decrement all references to the object.

Fixes: 142a27f0a731 ("hwrng: core - Reset user selected rng by writing "" to rng_current")
Signed-off-by: Gary R Hook <gary.hook@amd.com>
---
 drivers/char/hw_random/core.c |    4 ++++
 1 file changed, 4 insertions(+)

Patch
diff mbox

diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 657b8770b6b9..91bb98c42a1c 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -306,6 +306,10 @@  static int enable_best_rng(void)
 		ret = ((new_rng == current_rng) ? 0 : set_current_rng(new_rng));
 		if (!ret)
 			cur_rng_set_by_user = 0;
+	} else {
+		drop_current_rng();
+		cur_rng_set_by_user = 0;
+		ret = 0;
 	}
 
 	return ret;