From: Xixin Liu <liuxixin@kylinos.cn>
To: linuxppc-dev@lists.ozlabs.org
Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com,
chleroy@kernel.org, linux-kernel@vger.kernel.org,
liuxixin@kylinos.cn
Subject: [PATCH v1 3/4] powerpc/pseries: energy: bound H_BEST_ENERGY cnt and sysfs output
Date: Fri, 07 Aug 2026 11:11:14 +0800 [thread overview]
Message-ID: <prpppc03energ.1786072274.git.liuxixin@kylinos.cn> (raw)
In-Reply-To: <cover.1786072274.git.liuxixin@kylinos.cn>
The H_BEST_ENERGY sysfs path takes cnt from the hypercall return buffer
and walks buf_page[2*i+1] without checking that cnt fits in the single
page allocated for the hcall, and sprintf()s into the PAGE_SIZE sysfs
buffer without remaining-space checks.
Clamp cnt to the number of u32 pairs that fit in the page, and stop
formatting before overflowing the sysfs page.
Signed-off-by: Xixin Liu <liuxixin@kylinos.cn>
---
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/pseries_energy.c b/arch/powerpc/platforms/pseries/pseries_energy.c
index fdaf85ecd39b..8344f00656e5 100644
--- a/arch/powerpc/platforms/pseries/pseries_energy.c
+++ b/arch/powerpc/platforms/pseries/pseries_energy.c
@@ -209,16 +209,28 @@
return -EINVAL;
}
+ /*
+ * Each entry occupies two u32s in buf_page. Never walk past the
+ * page, and never sprintf past the PAGE_SIZE sysfs buffer.
+ */
cnt = retbuf[0];
+ if (cnt > (PAGE_SIZE / sizeof(u32)) / 2)
+ cnt = (PAGE_SIZE / sizeof(u32)) / 2;
+
for (i = 0; i < cnt; i++) {
cpu = drc_index_to_cpu(buf_page[2*i+1]);
if ((cpu_online(cpu) && !activate) ||
- (!cpu_online(cpu) && activate))
+ (!cpu_online(cpu) && activate)) {
+ if (s - page >= PAGE_SIZE - 16)
+ break;
s += sprintf(s, "%d,", cpu);
+ }
}
if (s > page) { /* Something to show */
s--; /* Suppress last comma */
- s += sprintf(s, "\n");
+ /* sprintf needs room for '\n' and trailing NUL. */
+ if (s - page < PAGE_SIZE - 1)
+ s += sprintf(s, "\n");
}
free_page((unsigned long) buf_page);
--
2.43.0
next prev parent reply other threads:[~2026-08-07 3:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 3:11 [PATCH v1 0/4] powerpc: assorted fixes (gpci, imc, energy, iommu) Xixin Liu
2026-08-07 3:11 ` [PATCH v1 1/4] powerpc/perf: hv-gpci: bound sysfs hex formatting to PAGE_SIZE Xixin Liu
2026-08-07 3:11 ` [PATCH v1 2/4] powerpc/powernv: opal-imc: fix debugfs name buffer size Xixin Liu
2026-08-07 3:11 ` Xixin Liu [this message]
2026-08-07 3:11 ` [PATCH v1 4/4] powerpc/iommu: fix debugfs name buffer for 64-bit it_index Xixin Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=prpppc03energ.1786072274.git.liuxixin@kylinos.cn \
--to=liuxixin@kylinos.cn \
--cc=chleroy@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.