powerpc: Fix string instr. emulation for 32-bit processes on ppc64
String instruction emulation would erroneously result in a segfault if the upper bits of the EA are set and is so high that it fails access check. Truncate the EA to 32 bits if the process is 32-bit. Signed-off-by: James Yang <James.Yang@freescale.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
e1b85c17bf
commit
80aa0fb494
|
@ -866,6 +866,10 @@ static int emulate_string_inst(struct pt_regs *regs, u32 instword)
|
|||
u8 val;
|
||||
u32 shift = 8 * (3 - (pos & 0x3));
|
||||
|
||||
/* if process is 32-bit, clear upper 32 bits of EA */
|
||||
if ((regs->msr & MSR_64BIT) == 0)
|
||||
EA &= 0xFFFFFFFF;
|
||||
|
||||
switch ((instword & PPC_INST_STRING_MASK)) {
|
||||
case PPC_INST_LSWX:
|
||||
case PPC_INST_LSWI:
|
||||
|
|
Loading…
Reference in New Issue