* [PATCH] crypto: atmel-sha204a - clear RNG data from memory
@ 2026-07-08 15:04 Thorsten Blum
0 siblings, 0 replies; only message in thread
From: Thorsten Blum @ 2026-07-08 15:04 UTC (permalink / raw)
To: Thorsten Blum, Herbert Xu, David S. Miller, Nicolas Ferre,
Alexandre Belloni, Claudiu Beznea
Cc: linux-crypto, linux-arm-kernel, linux-kernel
In atmel_sha204a_rng_read(), use memzero_explicit() to clear the local
stack variable cmd before it goes out of scope, since cmd.data may still
hold the last 32 random bytes.
Since atmel_sha204a_rng_done() caches work_data in hwrng::priv, and its
response data is later used as RNG entropy, use kfree_sensitive() to
clear the cached data on transaction failure and device removal.
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
drivers/crypto/atmel-sha204a.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c
index 5eb76245347d..21a84c29c9b7 100644
--- a/drivers/crypto/atmel-sha204a.c
+++ b/drivers/crypto/atmel-sha204a.c
@@ -15,6 +15,7 @@
#include <linux/module.h>
#include <linux/scatterlist.h>
#include <linux/slab.h>
+#include <linux/string.h>
#include <linux/sysfs.h>
#include <linux/workqueue.h>
#include "atmel-i2c.h"
@@ -35,7 +36,7 @@ static void atmel_sha204a_rng_done(struct atmel_i2c_work_data *work_data,
dev_warn_ratelimited(&i2c_priv->client->dev,
"i2c transaction failed (%d)\n",
status);
- kfree(work_data);
+ kfree_sensitive(work_data);
atomic_dec(&i2c_priv->tfm_count);
return;
}
@@ -95,12 +96,15 @@ static int atmel_sha204a_rng_read(struct hwrng *rng, void *data, size_t max,
ret = atmel_i2c_send_receive(i2c_priv->client, &cmd);
if (ret)
- return ret;
+ goto out;
max = min(RANDOM_RSP_SIZE - CMD_OVERHEAD_SIZE, max);
memcpy(data, &cmd.data[RSP_DATA_IDX], max);
+ ret = max;
- return max;
+out:
+ memzero_explicit(&cmd, sizeof(cmd));
+ return ret;
}
static int atmel_sha204a_otp_read(struct i2c_client *client, u16 addr, u8 *otp)
@@ -209,7 +213,7 @@ static void atmel_sha204a_remove(struct i2c_client *client)
devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng);
atmel_i2c_flush_queue();
- kfree((void *)i2c_priv->hwrng.priv);
+ kfree_sensitive((void *)i2c_priv->hwrng.priv);
}
static const struct of_device_id atmel_sha204a_dt_ids[] = {
base-commit: e264401ce4776a288524e5b87593d4d864147115
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-08 15:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 15:04 [PATCH] crypto: atmel-sha204a - clear RNG data from memory Thorsten Blum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.