diff options
Diffstat (limited to 'arch/um/kernel/trap.c')
-rw-r--r-- | arch/um/kernel/trap.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index 0e8b6158f224..58fe36856182 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c | |||
@@ -163,13 +163,12 @@ static void show_segv_info(struct uml_pt_regs *regs) | |||
163 | static void bad_segv(struct faultinfo fi, unsigned long ip) | 163 | static void bad_segv(struct faultinfo fi, unsigned long ip) |
164 | { | 164 | { |
165 | current->thread.arch.faultinfo = fi; | 165 | current->thread.arch.faultinfo = fi; |
166 | force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi), | 166 | force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi)); |
167 | current); | ||
168 | } | 167 | } |
169 | 168 | ||
170 | void fatal_sigsegv(void) | 169 | void fatal_sigsegv(void) |
171 | { | 170 | { |
172 | force_sigsegv(SIGSEGV, current); | 171 | force_sigsegv(SIGSEGV); |
173 | do_signal(¤t->thread.regs); | 172 | do_signal(¤t->thread.regs); |
174 | /* | 173 | /* |
175 | * This is to tell gcc that we're not returning - do_signal | 174 | * This is to tell gcc that we're not returning - do_signal |
@@ -268,13 +267,11 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, | |||
268 | 267 | ||
269 | if (err == -EACCES) { | 268 | if (err == -EACCES) { |
270 | current->thread.arch.faultinfo = fi; | 269 | current->thread.arch.faultinfo = fi; |
271 | force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, | 270 | force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address); |
272 | current); | ||
273 | } else { | 271 | } else { |
274 | BUG_ON(err != -EFAULT); | 272 | BUG_ON(err != -EFAULT); |
275 | current->thread.arch.faultinfo = fi; | 273 | current->thread.arch.faultinfo = fi; |
276 | force_sig_fault(SIGSEGV, si_code, (void __user *) address, | 274 | force_sig_fault(SIGSEGV, si_code, (void __user *) address); |
277 | current); | ||
278 | } | 275 | } |
279 | 276 | ||
280 | out: | 277 | out: |
@@ -304,12 +301,11 @@ void relay_signal(int sig, struct siginfo *si, struct uml_pt_regs *regs) | |||
304 | if ((err == 0) && (siginfo_layout(sig, code) == SIL_FAULT)) { | 301 | if ((err == 0) && (siginfo_layout(sig, code) == SIL_FAULT)) { |
305 | struct faultinfo *fi = UPT_FAULTINFO(regs); | 302 | struct faultinfo *fi = UPT_FAULTINFO(regs); |
306 | current->thread.arch.faultinfo = *fi; | 303 | current->thread.arch.faultinfo = *fi; |
307 | force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi), | 304 | force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi)); |
308 | current); | ||
309 | } else { | 305 | } else { |
310 | printk(KERN_ERR "Attempted to relay unknown signal %d (si_code = %d) with errno %d\n", | 306 | printk(KERN_ERR "Attempted to relay unknown signal %d (si_code = %d) with errno %d\n", |
311 | sig, code, err); | 307 | sig, code, err); |
312 | force_sig(sig, current); | 308 | force_sig(sig); |
313 | } | 309 | } |
314 | } | 310 | } |
315 | 311 | ||