diff options
Diffstat (limited to 'arch/um/kernel')
| -rw-r--r-- | arch/um/kernel/exec.c | 2 | ||||
| -rw-r--r-- | arch/um/kernel/ptrace.c | 7 | ||||
| -rw-r--r-- | arch/um/kernel/skas/mmu.c | 2 | ||||
| -rw-r--r-- | arch/um/kernel/tlb.c | 4 | ||||
| -rw-r--r-- | arch/um/kernel/trap.c | 16 |
5 files changed, 13 insertions, 18 deletions
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c index a43d42bf0a86..783b9247161f 100644 --- a/arch/um/kernel/exec.c +++ b/arch/um/kernel/exec.c | |||
| @@ -32,7 +32,7 @@ void flush_thread(void) | |||
| 32 | if (ret) { | 32 | if (ret) { |
| 33 | printk(KERN_ERR "flush_thread - clearing address space failed, " | 33 | printk(KERN_ERR "flush_thread - clearing address space failed, " |
| 34 | "err = %d\n", ret); | 34 | "err = %d\n", ret); |
| 35 | force_sig(SIGKILL, current); | 35 | force_sig(SIGKILL); |
| 36 | } | 36 | } |
| 37 | get_safe_registers(current_pt_regs()->regs.gp, | 37 | get_safe_registers(current_pt_regs()->regs.gp, |
| 38 | current_pt_regs()->regs.fp); | 38 | current_pt_regs()->regs.fp); |
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 5f47422401e1..da1e96b1ec3e 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c | |||
| @@ -112,13 +112,12 @@ long arch_ptrace(struct task_struct *child, long request, | |||
| 112 | return ret; | 112 | return ret; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | static void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs, | 115 | static void send_sigtrap(struct uml_pt_regs *regs, int error_code) |
| 116 | int error_code) | ||
| 117 | { | 116 | { |
| 118 | /* Send us the fake SIGTRAP */ | 117 | /* Send us the fake SIGTRAP */ |
| 119 | force_sig_fault(SIGTRAP, TRAP_BRKPT, | 118 | force_sig_fault(SIGTRAP, TRAP_BRKPT, |
| 120 | /* User-mode eip? */ | 119 | /* User-mode eip? */ |
| 121 | UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL, tsk); | 120 | UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL); |
| 122 | } | 121 | } |
| 123 | 122 | ||
| 124 | /* | 123 | /* |
| @@ -147,7 +146,7 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
| 147 | 146 | ||
| 148 | /* Fake a debug trap */ | 147 | /* Fake a debug trap */ |
| 149 | if (ptraced & PT_DTRACE) | 148 | if (ptraced & PT_DTRACE) |
| 150 | send_sigtrap(current, ®s->regs, 0); | 149 | send_sigtrap(®s->regs, 0); |
| 151 | 150 | ||
| 152 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 151 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
| 153 | return; | 152 | return; |
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c index 7a1f2a936fd1..29e7f5f9f188 100644 --- a/arch/um/kernel/skas/mmu.c +++ b/arch/um/kernel/skas/mmu.c | |||
| @@ -119,7 +119,7 @@ void uml_setup_stubs(struct mm_struct *mm) | |||
| 119 | return; | 119 | return; |
| 120 | 120 | ||
| 121 | out: | 121 | out: |
| 122 | force_sigsegv(SIGSEGV, current); | 122 | force_sigsegv(SIGSEGV); |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | void arch_exit_mmap(struct mm_struct *mm) | 125 | void arch_exit_mmap(struct mm_struct *mm) |
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c index 8347161c2ae0..45f739bf302f 100644 --- a/arch/um/kernel/tlb.c +++ b/arch/um/kernel/tlb.c | |||
| @@ -329,7 +329,7 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr, | |||
| 329 | "process: %d\n", task_tgid_vnr(current)); | 329 | "process: %d\n", task_tgid_vnr(current)); |
| 330 | /* We are under mmap_sem, release it such that current can terminate */ | 330 | /* We are under mmap_sem, release it such that current can terminate */ |
| 331 | up_write(¤t->mm->mmap_sem); | 331 | up_write(¤t->mm->mmap_sem); |
| 332 | force_sig(SIGKILL, current); | 332 | force_sig(SIGKILL); |
| 333 | do_signal(¤t->thread.regs); | 333 | do_signal(¤t->thread.regs); |
| 334 | } | 334 | } |
| 335 | } | 335 | } |
| @@ -487,7 +487,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address) | |||
| 487 | 487 | ||
| 488 | kill: | 488 | kill: |
| 489 | printk(KERN_ERR "Failed to flush page for address 0x%lx\n", address); | 489 | printk(KERN_ERR "Failed to flush page for address 0x%lx\n", address); |
| 490 | force_sig(SIGKILL, current); | 490 | force_sig(SIGKILL); |
| 491 | } | 491 | } |
| 492 | 492 | ||
| 493 | pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address) | 493 | pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address) |
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 | ||
