From: Ahmad Fatoum <a.fatoum@barebox.org>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>
Subject: [PATCH] RISC-V: fix stack clobbering in relocate_to_adr
Date: Fri, 12 Sep 2025 10:34:38 +0200 [thread overview]
Message-ID: <20250912083439.2470689-1-a.fatoum@barebox.org> (raw)
relocate_to_adr is decrementing two SZREG worth of stack space to be able
to spill two registers. An off-by-one led us to reference the word after
the reserved stack space, clobbering one word from the previous
function's stack frame unintentionally.
This this by decrementing the offsets by 1.
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
arch/riscv/lib/setupc.S | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/lib/setupc.S b/arch/riscv/lib/setupc.S
index d225186c79fd..423de4181ea6 100644
--- a/arch/riscv/lib/setupc.S
+++ b/arch/riscv/lib/setupc.S
@@ -32,14 +32,14 @@ ENTRY(relocate_to_adr)
/* adjust return address */
sub ra, ra, a1 /* sub address where we are actually running */
add ra, ra, a0 /* add address where we are going to run */
- REG_S ra, (SZREG * 2)(sp)
+ REG_S ra, SZREG(sp)
beq a0, a1, copied /* skip if already at new address */
lla a2, copied
sub a2, a2, a1
add a2, a2, a0
- REG_S a2, (SZREG * 1)(sp)
+ REG_S a2, (sp)
lla a2, __bss_start
sub a2, a2, a1 /* a2: size */
@@ -48,10 +48,10 @@ ENTRY(relocate_to_adr)
jal sync_caches_for_execution
- REG_L a0, (SZREG * 1)(sp)
+ REG_L a0, (sp)
jr a0 /* jump to relocated address */
copied:
- REG_L ra, (SZREG * 2)(sp)
+ REG_L ra, SZREG(sp)
addi sp, sp, SZREG * 2
j relocate_to_current_adr /* relocate binary */
ENDPROC(relocate_to_adr)
--
2.47.3
reply other threads:[~2025-09-12 8:35 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20250912083439.2470689-1-a.fatoum@barebox.org \
--to=a.fatoum@barebox.org \
--cc=barebox@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox