aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/hw_random/core.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 91bb98c42a1c..aaf9e5afaad4 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -516,11 +516,18 @@ EXPORT_SYMBOL_GPL(hwrng_register);
516 516
517void hwrng_unregister(struct hwrng *rng) 517void hwrng_unregister(struct hwrng *rng)
518{ 518{
519 int err;
520
519 mutex_lock(&rng_mutex); 521 mutex_lock(&rng_mutex);
520 522
521 list_del(&rng->list); 523 list_del(&rng->list);
522 if (current_rng == rng) 524 if (current_rng == rng) {
523 enable_best_rng(); 525 err = enable_best_rng();
526 if (err) {
527 drop_current_rng();
528 cur_rng_set_by_user = 0;
529 }
530 }
524 531
525 if (list_empty(&rng_list)) { 532 if (list_empty(&rng_list)) {
526 mutex_unlock(&rng_mutex); 533 mutex_unlock(&rng_mutex);