[PATCH v2 4/4] hwrng: core - use sysfs_emit_at in rng_available_show
From: Thorsten Blum
Date: Tue May 05 2026 - 05:47:02 EST
Replace strlcat() with sysfs_emit_at() in rng_available_show() and add
'int len' to keep track of the number of bytes written. sysfs_emit_at()
is preferred for formatting sysfs output because it provides safer
bounds checking.
Inline mutex_lock_interruptible() and drop the now-unused local error
variable. Remove the unnecessary 'buf' NUL initialization. Return 'len'
directly instead of strlen(buf).
Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
Signed-off-by: Thorsten Blum <thorsten.blum@xxxxxxxxx>
---
No changes in patch 4/4.
---
drivers/char/hw_random/core.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 26c46cd90a83..6931657ad2ca 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -25,6 +25,7 @@
#include <linux/sched/signal.h>
#include <linux/slab.h>
#include <linux/string.h>
+#include <linux/sysfs.h>
#include <linux/uaccess.h>
#include <linux/workqueue.h>
@@ -414,21 +415,17 @@ static ssize_t rng_available_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
- int err;
struct hwrng *rng;
+ int len = 0;
- err = mutex_lock_interruptible(&rng_mutex);
- if (err)
+ if (mutex_lock_interruptible(&rng_mutex))
return -ERESTARTSYS;
- buf[0] = '\0';
- list_for_each_entry(rng, &rng_list, list) {
- strlcat(buf, rng->name, PAGE_SIZE);
- strlcat(buf, " ", PAGE_SIZE);
- }
- strlcat(buf, "none\n", PAGE_SIZE);
+ list_for_each_entry(rng, &rng_list, list)
+ len += sysfs_emit_at(buf, len, "%s ", rng->name);
+ len += sysfs_emit_at(buf, len, "none\n");
mutex_unlock(&rng_mutex);
- return strlen(buf);
+ return len;
}
static ssize_t rng_selected_show(struct device *dev,