aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/kernel')
-rw-r--r--arch/um/kernel/exec.c2
-rw-r--r--arch/um/kernel/ptrace.c7
-rw-r--r--arch/um/kernel/skas/mmu.c2
-rw-r--r--arch/um/kernel/tlb.c4
-rw-r--r--arch/um/kernel/trap.c16
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
115static void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs, 115static 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, &regs->regs, 0); 149 send_sigtrap(&regs->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
121out: 121out:
122 force_sigsegv(SIGSEGV, current); 122 force_sigsegv(SIGSEGV);
123} 123}
124 124
125void arch_exit_mmap(struct mm_struct *mm) 125void 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(&current->mm->mmap_sem); 331 up_write(&current->mm->mmap_sem);
332 force_sig(SIGKILL, current); 332 force_sig(SIGKILL);
333 do_signal(&current->thread.regs); 333 do_signal(&current->thread.regs);
334 } 334 }
335} 335}
@@ -487,7 +487,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)
487 487
488kill: 488kill:
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
493pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address) 493pgd_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)
163static void bad_segv(struct faultinfo fi, unsigned long ip) 163static 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
170void fatal_sigsegv(void) 169void fatal_sigsegv(void)
171{ 170{
172 force_sigsegv(SIGSEGV, current); 171 force_sigsegv(SIGSEGV);
173 do_signal(&current->thread.regs); 172 do_signal(&current->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
280out: 277out:
@@ -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