Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Upgrade to 4.4.50-rt62
[kvmfornfv.git]
/
kernel
/
arch
/
parisc
/
kernel
/
unaligned.c
diff --git
a/kernel/arch/parisc/kernel/unaligned.c
b/kernel/arch/parisc/kernel/unaligned.c
index
d7c0acb
..
8d49614
100644
(file)
--- a/
kernel/arch/parisc/kernel/unaligned.c
+++ b/
kernel/arch/parisc/kernel/unaligned.c
@@
-666,7
+666,7
@@
void handle_unaligned(struct pt_regs *regs)
break;
}
break;
}
- if (modify && R1(regs->iir))
+ if (
ret == 0 &&
modify && R1(regs->iir))
regs->gr[R1(regs->iir)] = newbase;
regs->gr[R1(regs->iir)] = newbase;
@@
-677,6
+677,14
@@
void handle_unaligned(struct pt_regs *regs)
if (ret)
{
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);
printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret);
die_if_kernel("Unaligned data reference", regs, 28);