aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mm/alignment.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
index 1df38e833570..cfbcf8b95599 100644
--- a/arch/arm/mm/alignment.c
+++ b/arch/arm/mm/alignment.c
@@ -22,6 +22,7 @@
22#include <linux/sched.h> 22#include <linux/sched.h>
23#include <linux/uaccess.h> 23#include <linux/uaccess.h>
24 24
25#include <asm/system.h>
25#include <asm/unaligned.h> 26#include <asm/unaligned.h>
26 27
27#include "fault.h" 28#include "fault.h"
@@ -913,9 +914,16 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
913 if (ai_usermode & UM_FIXUP) 914 if (ai_usermode & UM_FIXUP)
914 goto fixup; 915 goto fixup;
915 916
916 if (ai_usermode & UM_SIGNAL) 917 if (ai_usermode & UM_SIGNAL) {
917 force_sig(SIGBUS, current); 918 siginfo_t si;
918 else { 919
920 si.si_signo = SIGBUS;
921 si.si_errno = 0;
922 si.si_code = BUS_ADRALN;
923 si.si_addr = (void __user *)addr;
924
925 force_sig_info(si.si_signo, &si, current);
926 } else {
919 /* 927 /*
920 * We're about to disable the alignment trap and return to 928 * We're about to disable the alignment trap and return to
921 * user space. But if an interrupt occurs before actually 929 * user space. But if an interrupt occurs before actually