[PATCH v2 02/10] soundwire: sysfs: Use sysfs_emit_at() in array show callbacks

From: Lee Jones

Date: Tue Nov 03 2026 - 05:23:13 EST


words_show() and the show callbacks generated by sdw_dpn_array_attr()
format firmware-supplied property arrays into the sysfs buffer using
unbounded sprintf(buf + size, ...) loops. If firmware provides a large
array count, sprintf() can write past PAGE_SIZE and corrupt kernel
memory.

Replace the sprintf(buf + size, ...) calls with bounds-checked
sysfs_emit_at() calls.

Closes: https://sashiko.dev/#/bug/linux-543ff498-3bed-412d-8972-4855c5aa6008
Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
---

v1 => v2: Drop Fixes and Stable tags

drivers/soundwire/sysfs_slave.c | 6 +++---
drivers/soundwire/sysfs_slave_dpn.c | 8 ++++----
2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index a2ee064147e0..35272cfe9fc8 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -161,9 +161,9 @@ static ssize_t words_show(struct device *dev,
int i;

for (i = 0; i < slave->prop.dp0_prop->num_words; i++)
- size += sprintf(buf + size, "%d ",
- slave->prop.dp0_prop->words[i]);
- size += sprintf(buf + size, "\n");
+ size += sysfs_emit_at(buf, size, "%d ",
+ slave->prop.dp0_prop->words[i]);
+ size += sysfs_emit_at(buf, size, "\n");

return size;
}
diff --git a/drivers/soundwire/sysfs_slave_dpn.c b/drivers/soundwire/sysfs_slave_dpn.c
index d2561400da77..16872ea64b1f 100644
--- a/drivers/soundwire/sysfs_slave_dpn.c
+++ b/drivers/soundwire/sysfs_slave_dpn.c
@@ -134,10 +134,10 @@ static ssize_t field##_dpn_show(struct sdw_slave *slave, \
for_each_set_bit(bit, &mask, 32) { \
if (bit == N) { \
for (j = 0; j < dpn[i].num_##field; j++) \
- size += sprintf(buf + size, \
- format_string, \
- dpn[i].field[j]); \
- size += sprintf(buf + size, "\n"); \
+ size += sysfs_emit_at(buf, size, \
+ format_string, \
+ dpn[i].field[j]); \
+ size += sysfs_emit_at(buf, size, "\n"); \
return size; \
} \
i++; \
--
2.56.0.385.gac671c819a-goog