aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/mm/fault.c
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2024-02-01 14:33:26 -0800
committerJakub Kicinski <kuba@kernel.org>2024-02-01 15:12:37 -0800
commitcf244463a286ea57ea7e63c33614d302f776e62e (patch)
treecaa068596cbfea621376822e30ab545c6516b2c7 /arch/parisc/mm/fault.c
parentMerge branch 'dpll-expose-lock-status-error-value-to-user' (diff)
parentMerge tag 'net-6.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/netd... (diff)
downloadlinux-cf244463a286ea57ea7e63c33614d302f776e62e.tar.gz
linux-cf244463a286ea57ea7e63c33614d302f776e62e.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR. No conflicts or adjacent changes. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'arch/parisc/mm/fault.c')
-rw-r--r--arch/parisc/mm/fault.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index 2fe5b44986e0..c39de84e98b0 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -150,11 +150,16 @@ int fixup_exception(struct pt_regs *regs)
* Fix up get_user() and put_user().
* ASM_EXCEPTIONTABLE_ENTRY_EFAULT() sets the least-significant
* bit in the relative address of the fixup routine to indicate
- * that gr[ASM_EXCEPTIONTABLE_REG] should be loaded with
- * -EFAULT to report a userspace access error.
+ * that the register encoded in the "or %r0,%r0,register"
+ * opcode should be loaded with -EFAULT to report a userspace
+ * access error.
*/
if (fix->fixup & 1) {
- regs->gr[ASM_EXCEPTIONTABLE_REG] = -EFAULT;
+ int fault_error_reg = fix->err_opcode & 0x1f;
+ if (!WARN_ON(!fault_error_reg))
+ regs->gr[fault_error_reg] = -EFAULT;
+ pr_debug("Unalignment fixup of register %d at %pS\n",
+ fault_error_reg, (void*)regs->iaoq[0]);
/* zero target register for get_user() */
if (parisc_acctyp(0, regs->iir) == VM_READ) {