diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2016-06-29 17:36:47 -0700 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2016-06-29 17:36:47 -0700 |
commit | efe965a5dad66bd14219cdc9474ea75eda783456 (patch) | |
tree | c88aa38447747bee19da6e4097334cd4c98b426f /arch/parisc/kernel/unaligned.c | |
parent | 475764ae387355462c874892b03110298038adef (diff) | |
parent | 9ca1d50fa959cda1f04f43275f7930a70f1a631e (diff) |
Merge tag 'v4.4.14' into toradex_vf_4.4-nextColibri_VF_LinuxImageV2.6Beta2_20160701
This is the 4.4.14 stable release
Diffstat (limited to 'arch/parisc/kernel/unaligned.c')
-rw-r--r-- | arch/parisc/kernel/unaligned.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c index d7c0acb35ec2..8d49614d600d 100644 --- a/arch/parisc/kernel/unaligned.c +++ b/arch/parisc/kernel/unaligned.c @@ -666,7 +666,7 @@ void handle_unaligned(struct pt_regs *regs) break; } - if (modify && R1(regs->iir)) + if (ret == 0 && modify && R1(regs->iir)) regs->gr[R1(regs->iir)] = newbase; @@ -677,6 +677,14 @@ void handle_unaligned(struct pt_regs *regs) if (ret) { + /* + * The unaligned handler failed. + * If we were called by __get_user() or __put_user() jump + * to it's exception fixup handler instead of crashing. + */ + if (!user_mode(regs) && fixup_exception(regs)) + return; + printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret); die_if_kernel("Unaligned data reference", regs, 28); |