diff options
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 064a52564692..91a6e04d9741 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -658,7 +658,7 @@ static int emulate_instruction(struct pt_regs *regs) | |||
658 | u32 instword; | 658 | u32 instword; |
659 | u32 rd; | 659 | u32 rd; |
660 | 660 | ||
661 | if (!user_mode(regs)) | 661 | if (!user_mode(regs) || (regs->msr & MSR_LE)) |
662 | return -EINVAL; | 662 | return -EINVAL; |
663 | CHECK_FULL_REGS(regs); | 663 | CHECK_FULL_REGS(regs); |
664 | 664 | ||
@@ -805,9 +805,11 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
805 | 805 | ||
806 | void alignment_exception(struct pt_regs *regs) | 806 | void alignment_exception(struct pt_regs *regs) |
807 | { | 807 | { |
808 | int fixed; | 808 | int fixed = 0; |
809 | 809 | ||
810 | fixed = fix_alignment(regs); | 810 | /* we don't implement logging of alignment exceptions */ |
811 | if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS)) | ||
812 | fixed = fix_alignment(regs); | ||
811 | 813 | ||
812 | if (fixed == 1) { | 814 | if (fixed == 1) { |
813 | regs->nip += 4; /* skip over emulated instruction */ | 815 | regs->nip += 4; /* skip over emulated instruction */ |