From: Jeremy Kerr <jk@ozlabs.org>
To: linuxppc-dev@lists.ozlabs.org
Cc: "Cédric Le Goater" <clg@fr.ibm.com>
Subject: [PATCH 4/5 v2] powerpc/boot: Fix stack corruption in epapr entry point
Date: Wed, 11 Feb 2015 12:55:44 +0800 [thread overview]
Message-ID: <1423630544.753239.249639260955.4.gpush@pablo> (raw)
In-Reply-To: <1423630544.752188.889982625387.1.gpush@pablo>
Currently, a 64-bit little-endian zImage.epapr won't boot in epapr mode,
as we never return from platform_init.
Before entering C, we initialise our stack by setting r1 16 bytes below
the end of the _bss_stack:
stwu r0,-16(r1) /* establish a stack frame */
However, the called function will save the caller's lr in the caller's
frame's lr save area, at -16(r1) to -32(r1).
This means that writes to the fdt variable will corrupt the saved link
register:
0000000020c06018 l O .bss 0000000000001000 _bss_stack
0000000020c07018 l O .bss 0000000000000008 fdt
We'll need at least 32 bytes in the initial stack frame, to handle the
LR save area. We bump this to 112 bytes, as that'll be the max required
by ABIv1.
Thanks to Alistair Popple for debugging help.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
---
arch/powerpc/boot/crt0.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
index 14de4f8..e004062 100644
--- a/arch/powerpc/boot/crt0.S
+++ b/arch/powerpc/boot/crt0.S
@@ -218,7 +218,7 @@ p_base: mflr r10 /* r10 now points to runtime addr of p_base */
beq 6f
ld r1,0(r8)
li r0,0
- stdu r0,-16(r1) /* establish a stack frame */
+ stdu r0,-112(r1) /* establish a stack frame */
6:
#endif /* __powerpc64__ */
/* Call platform_init() */
prev parent reply other threads:[~2015-02-11 4:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-11 4:55 [PATCH 1/5 v2] powerpc/boot/fdt: Use unsigned long for pointer casts Jeremy Kerr
2015-02-11 4:55 ` [PATCH 5/5 v2] powerpc/boot: don't clobber r6 and r7 in epapr boot Jeremy Kerr
2015-02-11 4:55 ` [PATCH 3/5 v2] powerpc/boot/wrapper: use the pseries wrapper for zImage.epapr Jeremy Kerr
2015-02-11 4:55 ` [PATCH 2/5 v2] powerpc/boot/fdt: Add little-endian support to libfdt wrappers Jeremy Kerr
2015-02-16 16:53 ` Cedric Le Goater
2015-02-11 4:55 ` Jeremy Kerr [this message]
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=1423630544.753239.249639260955.4.gpush@pablo \
--to=jk@ozlabs.org \
--cc=clg@fr.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.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;
as well as URLs for NNTP newsgroup(s).