Linux-Crypto Archive on
 help / color / Atom feed
* [PATCH v3] hwrng: core: Freeze khwrng thread during suspend
@ 2019-08-05 23:32 Stephen Boyd
  2019-08-06 15:01 ` Stephen Boyd
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Stephen Boyd @ 2019-08-05 23:32 UTC (permalink / raw)
  To: Herbert Xu
  Cc: linux-kernel, linux-crypto, Andrey Pronin, Duncan Laurie,
	Jason Gunthorpe, Arnd Bergmann, Greg Kroah-Hartman,
	Guenter Roeck, Alexander Steffen

The hwrng_fill() function can run while devices are suspending and
resuming. If the hwrng is behind a bus such as i2c or SPI and that bus
is suspended, the hwrng may hang the bus while attempting to add some
randomness. It's been observed on ChromeOS devices with suspend-to-idle
(s2idle) and an i2c based hwrng that this kthread may run and ask the
hwrng device for randomness before the i2c bus has been resumed.

Let's make this kthread freezable so that we don't try to touch the
hwrng during suspend/resume. This ensures that we can't cause the hwrng
backing driver to get into a bad state because the device is guaranteed
to be resumed before the hwrng kthread is thawed.

Cc: Andrey Pronin <>
Cc: Duncan Laurie <>
Cc: Jason Gunthorpe <>
Cc: Arnd Bergmann <>
Cc: Greg Kroah-Hartman <>
Cc: Guenter Roeck <>
Cc: Alexander Steffen <>
Signed-off-by: Stephen Boyd <>

I'm splitting this patch off of the larger series so it can
go through the crypto tree. See [1] for the prevoius round.
Nothing has changed in this patch since then.


 drivers/char/hw_random/core.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 95be7228f327..3b88af3149a7 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -13,6 +13,7 @@
 #include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/err.h>
+#include <linux/freezer.h>
 #include <linux/fs.h>
 #include <linux/hw_random.h>
 #include <linux/kernel.h>
@@ -421,7 +422,9 @@ static int hwrng_fillfn(void *unused)
 	long rc;
-	while (!kthread_should_stop()) {
+	set_freezable();
+	while (!kthread_freezable_should_stop(NULL)) {
 		struct hwrng *rng;
 		rng = get_current_rng();
Sent by a computer through tubes

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, back to index

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-05 23:32 [PATCH v3] hwrng: core: Freeze khwrng thread during suspend Stephen Boyd
2019-08-06 15:01 ` Stephen Boyd
2019-08-15 12:06 ` Herbert Xu
2019-10-28 23:45 ` Maciej S. Szmigiero
     [not found]   ` <>
2019-10-29 15:50     ` Maciej S. Szmigiero
     [not found]       ` <>
2019-11-10  0:30         ` Maciej S. Szmigiero
2019-12-17  9:22           ` Amit Shah

Linux-Crypto Archive on

Archives are clonable:
	git clone --mirror linux-crypto/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-crypto linux-crypto/ \
	public-inbox-index linux-crypto

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone