Re: [PATCH linux-next] genirq: use sysfs_emit() instead of scnprintf().

From: Jiri Slaby
Date: Mon Mar 17 2025 - 02:12:46 EST


On 17. 03. 25, 7:07, Jiri Slaby wrote:
Hi,

your e-mail is both multipart and base64 encoded :(. Pls fix up your setup first.

On 15. 03. 25, 7:17, xie.ludan@xxxxxxxxxx wrote:
From: XieLudan <xie.ludan@xxxxxxxxxx>


Follow the advice in Documentation/filesystems/sysfs.rst:

show() should only use sysfs_emit() or sysfs_emit_at() when formatting

the value to be returned to user space.


Signed-off-by: XieLudan <xie.ludan@xxxxxxxxxx>

---

  kernel/irq/irqdesc.c | 12 ++++++------

  1 file changed, 6 insertions(+), 6 deletions(-)


diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c

index 287830739783..8ffe12fe5af6 100644

--- a/kernel/irq/irqdesc.c

+++ b/kernel/irq/irqdesc.c

@@ -257,11 +257,11 @@ static ssize_t per_cpu_count_show(struct kobject *kobj,

for_each_possible_cpu(cpu) {

unsigned int c = irq_desc_kstat_cpu(desc, cpu);

-ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%s%u", p, c);

+ret += sysfs_emit(buf + ret, "%s%u", p, c);

Well, so the PAGE_SIZE boundary is never checked for this stacking write now, right?

^^^ not really clear what I mean, so:

If you advance buf by ret every time, sysfs_emit() still would only check if buf is not written more than "PAGE_SIZE" bytes. But the original code performs this proper "PAGE_SIZE - ret" check.

thanks,

--
js
suse labs