linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv3 1/2] hwrng: optee: handle unlimited data rates
@ 2020-08-06 10:00 Jorge Ramirez-Ortiz
  2020-08-06 10:00 ` [PATCHv3 2/2] hwrng: optee: fix wait use case Jorge Ramirez-Ortiz
  2020-08-21  7:57 ` [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Herbert Xu
  0 siblings, 2 replies; 3+ messages in thread
From: Jorge Ramirez-Ortiz @ 2020-08-06 10:00 UTC (permalink / raw)
  To: jorge, sumit.garg, jens.wiklander
  Cc: mpm, herbert, arnd, ricardo, mike, gregkh, op-tee, linux-crypto,
	linux-kernel

Data rates of MAX_UINT32 will schedule an unnecessary one jiffy
timeout on the call to msleep. Avoid this scenario by using 0 as the
unlimited data rate.

Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
---
 drivers/char/hw_random/optee-rng.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/optee-rng.c b/drivers/char/hw_random/optee-rng.c
index 49b2e02537dd..5bc4700c4dae 100644
--- a/drivers/char/hw_random/optee-rng.c
+++ b/drivers/char/hw_random/optee-rng.c
@@ -128,7 +128,7 @@ static int optee_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
 		data += rng_size;
 		read += rng_size;
 
-		if (wait) {
+		if (wait && pvt_data->data_rate) {
 			if (timeout-- == 0)
 				return read;
 			msleep((1000 * (max - read)) / pvt_data->data_rate);
-- 
2.17.1


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

* [PATCHv3 2/2] hwrng: optee: fix wait use case
  2020-08-06 10:00 [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Jorge Ramirez-Ortiz
@ 2020-08-06 10:00 ` Jorge Ramirez-Ortiz
  2020-08-21  7:57 ` [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Herbert Xu
  1 sibling, 0 replies; 3+ messages in thread
From: Jorge Ramirez-Ortiz @ 2020-08-06 10:00 UTC (permalink / raw)
  To: jorge, sumit.garg, jens.wiklander
  Cc: mpm, herbert, arnd, ricardo, mike, gregkh, op-tee, linux-crypto,
	linux-kernel

The current code waits for data to be available before attempting a
second read. However the second read would not be executed as the
while loop will exit.

This fix does not wait if all data has been read (skips the call to
msleep(0)) and reads a second time if partial data was retrieved on
the first read.

Worth noticing that since msleep(0) schedules a one jiffy timeout is
better to skip such a call.

Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
---
 drivers/char/hw_random/optee-rng.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/char/hw_random/optee-rng.c b/drivers/char/hw_random/optee-rng.c
index 5bc4700c4dae..a99d82949981 100644
--- a/drivers/char/hw_random/optee-rng.c
+++ b/drivers/char/hw_random/optee-rng.c
@@ -122,14 +122,14 @@ static int optee_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
 	if (max > MAX_ENTROPY_REQ_SZ)
 		max = MAX_ENTROPY_REQ_SZ;
 
-	while (read == 0) {
+	while (read < max) {
 		rng_size = get_optee_rng_data(pvt_data, data, (max - read));
 
 		data += rng_size;
 		read += rng_size;
 
 		if (wait && pvt_data->data_rate) {
-			if (timeout-- == 0)
+			if ((timeout-- == 0) || (read == max))
 				return read;
 			msleep((1000 * (max - read)) / pvt_data->data_rate);
 		} else {
-- 
2.17.1


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

* Re: [PATCHv3 1/2] hwrng: optee: handle unlimited data rates
  2020-08-06 10:00 [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Jorge Ramirez-Ortiz
  2020-08-06 10:00 ` [PATCHv3 2/2] hwrng: optee: fix wait use case Jorge Ramirez-Ortiz
@ 2020-08-21  7:57 ` Herbert Xu
  1 sibling, 0 replies; 3+ messages in thread
From: Herbert Xu @ 2020-08-21  7:57 UTC (permalink / raw)
  To: Jorge Ramirez-Ortiz
  Cc: sumit.garg, jens.wiklander, mpm, arnd, ricardo, mike, gregkh,
	op-tee, linux-crypto, linux-kernel

On Thu, Aug 06, 2020 at 12:00:09PM +0200, Jorge Ramirez-Ortiz wrote:
> Data rates of MAX_UINT32 will schedule an unnecessary one jiffy
> timeout on the call to msleep. Avoid this scenario by using 0 as the
> unlimited data rate.
> 
> Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
> Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
> ---
>  drivers/char/hw_random/optee-rng.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

All applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

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

end of thread, other threads:[~2020-08-21  7:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-06 10:00 [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Jorge Ramirez-Ortiz
2020-08-06 10:00 ` [PATCHv3 2/2] hwrng: optee: fix wait use case Jorge Ramirez-Ortiz
2020-08-21  7:57 ` [PATCHv3 1/2] hwrng: optee: handle unlimited data rates Herbert Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).