diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2014-02-14 19:21:03 +0100 |
---|---|---|
committer | Anton Blanchard <anton@samba.org> | 2014-04-23 10:05:24 +1000 |
commit | 752a6422fec3c0f5f9d4ac43d92f5dd13e22fde4 (patch) | |
tree | 6ef91c1ad3c067345ce45bb6d7730ab9f38c9241 /arch/powerpc/lib/copypage_power7.S | |
parent | b37c10d128a2fa3256d4e67c184177270eac4b86 (diff) | |
download | linux-stable-752a6422fec3c0f5f9d4ac43d92f5dd13e22fde4.tar.gz linux-stable-752a6422fec3c0f5f9d4ac43d92f5dd13e22fde4.tar.bz2 linux-stable-752a6422fec3c0f5f9d4ac43d92f5dd13e22fde4.zip |
powerpc: Fix unsafe accesses to parameter area in ELFv2
Some of the assembler files in lib/ make use of the fact that in the
ELFv1 ABI, the caller guarantees to provide stack space to save the
parameter registers r3 ... r10. This guarantee is no longer present
in ELFv2 for functions that have no variable argument list and no
more than 8 arguments.
Change the affected routines to temporarily store registers in the
red zone and/or the top of their own stack frame (in the space
provided to save r31 .. r29, which is actually not used in these
routines).
In opal_query_takeover, simply always allocate a stack frame;
the routine is not performance critical.
Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Diffstat (limited to 'arch/powerpc/lib/copypage_power7.S')
-rw-r--r-- | arch/powerpc/lib/copypage_power7.S | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/powerpc/lib/copypage_power7.S b/arch/powerpc/lib/copypage_power7.S index affc6d308e13..d7dafb3777ac 100644 --- a/arch/powerpc/lib/copypage_power7.S +++ b/arch/powerpc/lib/copypage_power7.S @@ -56,15 +56,15 @@ _GLOBAL(copypage_power7) #ifdef CONFIG_ALTIVEC mflr r0 - std r3,STK_PARAM(R3)(r1) - std r4,STK_PARAM(R4)(r1) + std r3,-STACKFRAMESIZE+STK_REG(R31)(r1) + std r4,-STACKFRAMESIZE+STK_REG(R30)(r1) std r0,16(r1) stdu r1,-STACKFRAMESIZE(r1) bl enter_vmx_copy cmpwi r3,0 ld r0,STACKFRAMESIZE+16(r1) - ld r3,STACKFRAMESIZE+STK_PARAM(R3)(r1) - ld r4,STACKFRAMESIZE+STK_PARAM(R4)(r1) + ld r3,STK_REG(R31)(r1) + ld r4,STK_REG(R30)(r1) mtlr r0 li r0,(PAGE_SIZE/128) |