* [PATCH v4 0/1] crypto: atmel-sha204a - multiple RNG fixes @ 2026-04-26 15:49 Lothar Rubusch 2026-04-26 15:49 ` [PATCH v4 1/1] crypto: atmel-sha204a - fix non-blocking read logic Lothar Rubusch 0 siblings, 1 reply; 3+ messages in thread From: Lothar Rubusch @ 2026-04-26 15:49 UTC (permalink / raw) To: herbert, thorsten.blum, davem, nicolas.ferre, alexandre.belloni, claudiu.beznea, ardb, linusw Cc: linux-crypto, linux-arm-kernel, linux-kernel, l.rubusch When testing the RNG functionality on the Atmel SHA204a hardware, rngtest reported failures. Fix start of reading and size of fetched data. I verified and applied Ard's solution (tagged it with sugtgested-by, pls tell me if I used the wrong tag). Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com> --- v3 -> v4: Reduce seet and set focus on RNG fix, blocking and nonblocking v2 -> v3: Removal blank line, rebased v1 -> v2: Removal of C++ style comment --- Lothar Rubusch (1): crypto: atmel-sha204a - fix non-blocking read logic drivers/crypto/atmel-sha204a.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) base-commit: 5db6ef9847717329f12c5ea8aba7e9f588a980c0 -- 2.39.5 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v4 1/1] crypto: atmel-sha204a - fix non-blocking read logic 2026-04-26 15:49 [PATCH v4 0/1] crypto: atmel-sha204a - multiple RNG fixes Lothar Rubusch @ 2026-04-26 15:49 ` Lothar Rubusch 2026-04-26 16:43 ` Thorsten Blum 0 siblings, 1 reply; 3+ messages in thread From: Lothar Rubusch @ 2026-04-26 15:49 UTC (permalink / raw) To: herbert, thorsten.blum, davem, nicolas.ferre, alexandre.belloni, claudiu.beznea, ardb, linusw Cc: linux-crypto, linux-arm-kernel, linux-kernel, l.rubusch The blocking and non-blocking paths were failing to provide valid entropy due to improper buffer management. Read the buffer starting from bit 1, only fetch the 32 bytes of random data of the return message. Tested on a Atmel SHA204a device. Before (here for blocking) tests showed repeadetly reading reduced bytes of entropy: $ head -c 32 /dev/hwrng | hexdump -C 00000000 02 28 85 b3 47 40 f2 ee 00 00 00 00 00 00 00 00 |.(..G@..........| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 After, the result will be similar to the following: $ head -c 32 /dev/hwrng | hexdump -C 00000000 5a fc 3f 13 14 68 fe 06 68 0a bd 04 83 6e 09 69 |Z.?..h..h....n.i| 00000010 75 ff cf 87 10 84 3b c9 c1 df ae eb 45 53 4c c3 |u.....;.....ESL.| 00000020 Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random number generator") Suggested-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com> --- drivers/crypto/atmel-sha204a.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index dbb39ed0cea1..39a229086a84 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -48,8 +48,8 @@ static int atmel_sha204a_rng_read_nonblocking(struct hwrng *rng, void *data, if (rng->priv) { work_data = (struct atmel_i2c_work_data *)rng->priv; - max = min(sizeof(work_data->cmd.data), max); - memcpy(data, &work_data->cmd.data, max); + max = min(RANDOM_RSP_SIZE - CMD_OVERHEAD_SIZE, max); + memcpy(data, &work_data->cmd.data[1], max); rng->priv = 0; } else { work_data = kmalloc_obj(*work_data, GFP_ATOMIC); @@ -87,8 +87,8 @@ static int atmel_sha204a_rng_read(struct hwrng *rng, void *data, size_t max, if (ret) return ret; - max = min(sizeof(cmd.data), max); - memcpy(data, cmd.data, max); + max = min(RANDOM_RSP_SIZE - CMD_OVERHEAD_SIZE, max); + memcpy(data, &cmd.data[1], max); return max; } -- 2.39.5 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v4 1/1] crypto: atmel-sha204a - fix non-blocking read logic 2026-04-26 15:49 ` [PATCH v4 1/1] crypto: atmel-sha204a - fix non-blocking read logic Lothar Rubusch @ 2026-04-26 16:43 ` Thorsten Blum 0 siblings, 0 replies; 3+ messages in thread From: Thorsten Blum @ 2026-04-26 16:43 UTC (permalink / raw) To: Lothar Rubusch Cc: herbert, davem, nicolas.ferre, alexandre.belloni, claudiu.beznea, ardb, linusw, linux-crypto, linux-arm-kernel, linux-kernel On Sun, Apr 26, 2026 at 03:49:40PM +0000, Lothar Rubusch wrote: > The blocking and non-blocking paths were failing to provide valid entropy > due to improper buffer management. Read the buffer starting from bit 1, > only fetch the 32 bytes of random data of the return message. > > Tested on a Atmel SHA204a device. > > Before (here for blocking) tests showed repeadetly reading reduced bytes of s/repeadetly/repeatedly/ > entropy: > $ head -c 32 /dev/hwrng | hexdump -C > 00000000 02 28 85 b3 47 40 f2 ee 00 00 00 00 00 00 00 00 |.(..G@..........| > 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > 00000020 > > After, the result will be similar to the following: > $ head -c 32 /dev/hwrng | hexdump -C > 00000000 5a fc 3f 13 14 68 fe 06 68 0a bd 04 83 6e 09 69 |Z.?..h..h....n.i| > 00000010 75 ff cf 87 10 84 3b c9 c1 df ae eb 45 53 4c c3 |u.....;.....ESL.| > 00000020 > > Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random number generator") > Suggested-by: Ard Biesheuvel <ardb@kernel.org> > Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com> > --- > drivers/crypto/atmel-sha204a.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c > index dbb39ed0cea1..39a229086a84 100644 > --- a/drivers/crypto/atmel-sha204a.c > +++ b/drivers/crypto/atmel-sha204a.c > @@ -48,8 +48,8 @@ static int atmel_sha204a_rng_read_nonblocking(struct hwrng *rng, void *data, > > if (rng->priv) { > work_data = (struct atmel_i2c_work_data *)rng->priv; > - max = min(sizeof(work_data->cmd.data), max); > - memcpy(data, &work_data->cmd.data, max); > + max = min(RANDOM_RSP_SIZE - CMD_OVERHEAD_SIZE, max); > + memcpy(data, &work_data->cmd.data[1], max); Please use RSP_DATA_IDX instead of 1 as the index. > rng->priv = 0; > } else { > work_data = kmalloc_obj(*work_data, GFP_ATOMIC); > @@ -87,8 +87,8 @@ static int atmel_sha204a_rng_read(struct hwrng *rng, void *data, size_t max, > if (ret) > return ret; > > - max = min(sizeof(cmd.data), max); > - memcpy(data, cmd.data, max); > + max = min(RANDOM_RSP_SIZE - CMD_OVERHEAD_SIZE, max); > + memcpy(data, &cmd.data[1], max); Same here. Thanks, Thorsten ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-26 16:43 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-26 15:49 [PATCH v4 0/1] crypto: atmel-sha204a - multiple RNG fixes Lothar Rubusch 2026-04-26 15:49 ` [PATCH v4 1/1] crypto: atmel-sha204a - fix non-blocking read logic Lothar Rubusch 2026-04-26 16:43 ` Thorsten Blum
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox