From: Stephen Boyd <swboyd@chromium.org> To: Herbert Xu <herbert@gondor.apana.org.au> Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, Andrey Pronin <apronin@chromium.org>, Duncan Laurie <dlaurie@chromium.org>, Jason Gunthorpe <jgg@ziepe.ca>, Arnd Bergmann <arnd@arndb.de>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guenter Roeck <groeck@chromium.org>, Alexander Steffen <Alexander.Steffen@infineon.com> Subject: [PATCH v3] hwrng: core: Freeze khwrng thread during suspend Date: Mon, 5 Aug 2019 16:32:41 -0700 Message-ID: <20190805233241.220521-1-swboyd@chromium.org> (raw) 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 <apronin@chromium.org> Cc: Duncan Laurie <dlaurie@chromium.org> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Guenter Roeck <groeck@chromium.org> Cc: Alexander Steffen <Alexander.Steffen@infineon.com> Signed-off-by: Stephen Boyd <swboyd@chromium.org> --- 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. [1] https://lkml.kernel.org/r/20190716224518.62556-2-swboyd@chromium.org 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
next reply index Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-05 23:32 Stephen Boyd [this message] 2019-08-06 15:01 ` Stephen Boyd 2019-08-15 12:06 ` Herbert Xu 2019-10-28 23:45 ` Maciej S. Szmigiero [not found] ` <5db85058.1c69fb81.202d7.e3d0@mx.google.com> 2019-10-29 15:50 ` Maciej S. Szmigiero [not found] ` <5dc0c12e.1c69fb81.2ce1c.01ee@mx.google.com> 2019-11-10 0:30 ` Maciej S. Szmigiero
Reply instructions: You may reply publically to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190805233241.220521-1-swboyd@chromium.org \ --to=swboyd@chromium.org \ --cc=Alexander.Steffen@infineon.com \ --cc=apronin@chromium.org \ --cc=arnd@arndb.de \ --cc=dlaurie@chromium.org \ --cc=gregkh@linuxfoundation.org \ --cc=groeck@chromium.org \ --cc=herbert@gondor.apana.org.au \ --cc=jgg@ziepe.ca \ --cc=linux-crypto@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-Crypto Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-crypto/0 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/ https://lore.kernel.org/linux-crypto \ linux-crypto@vger.kernel.org public-inbox-index linux-crypto Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-crypto AGPL code for this site: git clone https://public-inbox.org/public-inbox.git