diff options
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/Kconfig | 4 | ||||
-rw-r--r-- | arch/mips/kernel/ptrace.c | 41 | ||||
-rw-r--r-- | arch/mips/kernel/ptrace32.c | 3 | ||||
-rw-r--r-- | arch/mips/kernel/syscall.c | 16 |
4 files changed, 36 insertions, 28 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 5e666aad8815..ab9944693f1f 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -1656,3 +1656,7 @@ config GENERIC_HARDIRQS | |||
1656 | config GENERIC_IRQ_PROBE | 1656 | config GENERIC_IRQ_PROBE |
1657 | bool | 1657 | bool |
1658 | default y | 1658 | default y |
1659 | |||
1660 | config ISA_DMA_API | ||
1661 | bool | ||
1662 | default y | ||
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 92f2c39afe27..92e70ca3bff9 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/smp_lock.h> | 26 | #include <linux/smp_lock.h> |
27 | #include <linux/user.h> | 27 | #include <linux/user.h> |
28 | #include <linux/security.h> | 28 | #include <linux/security.h> |
29 | #include <linux/signal.h> | ||
29 | 30 | ||
30 | #include <asm/cpu.h> | 31 | #include <asm/cpu.h> |
31 | #include <asm/fpu.h> | 32 | #include <asm/fpu.h> |
@@ -257,7 +258,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data) | |||
257 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | 258 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ |
258 | case PTRACE_CONT: { /* restart after signal. */ | 259 | case PTRACE_CONT: { /* restart after signal. */ |
259 | ret = -EIO; | 260 | ret = -EIO; |
260 | if ((unsigned long) data > _NSIG) | 261 | if (!valid_signal(data)) |
261 | break; | 262 | break; |
262 | if (request == PTRACE_SYSCALL) { | 263 | if (request == PTRACE_SYSCALL) { |
263 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | 264 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); |
@@ -300,25 +301,38 @@ out: | |||
300 | return ret; | 301 | return ret; |
301 | } | 302 | } |
302 | 303 | ||
304 | static inline int audit_arch(void) | ||
305 | { | ||
306 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
307 | #ifdef CONFIG_MIPS64 | ||
308 | if (!(current->thread.mflags & MF_32BIT_REGS)) | ||
309 | return AUDIT_ARCH_MIPSEL64; | ||
310 | #endif /* MIPS64 */ | ||
311 | return AUDIT_ARCH_MIPSEL; | ||
312 | |||
313 | #else /* big endian... */ | ||
314 | #ifdef CONFIG_MIPS64 | ||
315 | if (!(current->thread.mflags & MF_32BIT_REGS)) | ||
316 | return AUDIT_ARCH_MIPS64; | ||
317 | #endif /* MIPS64 */ | ||
318 | return AUDIT_ARCH_MIPS; | ||
319 | |||
320 | #endif /* endian */ | ||
321 | } | ||
322 | |||
303 | /* | 323 | /* |
304 | * Notification of system call entry/exit | 324 | * Notification of system call entry/exit |
305 | * - triggered by current->work.syscall_trace | 325 | * - triggered by current->work.syscall_trace |
306 | */ | 326 | */ |
307 | asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) | 327 | asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) |
308 | { | 328 | { |
309 | if (unlikely(current->audit_context)) { | 329 | if (unlikely(current->audit_context) && entryexit) |
310 | if (!entryexit) | 330 | audit_syscall_exit(current, AUDITSC_RESULT(regs->regs[2]), regs->regs[2]); |
311 | audit_syscall_entry(current, regs->regs[2], | ||
312 | regs->regs[4], regs->regs[5], | ||
313 | regs->regs[6], regs->regs[7]); | ||
314 | else | ||
315 | audit_syscall_exit(current, regs->regs[2]); | ||
316 | } | ||
317 | 331 | ||
318 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 332 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
319 | return; | 333 | goto out; |
320 | if (!(current->ptrace & PT_PTRACED)) | 334 | if (!(current->ptrace & PT_PTRACED)) |
321 | return; | 335 | goto out; |
322 | 336 | ||
323 | /* The 0x80 provides a way for the tracing parent to distinguish | 337 | /* The 0x80 provides a way for the tracing parent to distinguish |
324 | between a syscall stop and SIGTRAP delivery */ | 338 | between a syscall stop and SIGTRAP delivery */ |
@@ -334,4 +348,9 @@ asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) | |||
334 | send_sig(current->exit_code, current, 1); | 348 | send_sig(current->exit_code, current, 1); |
335 | current->exit_code = 0; | 349 | current->exit_code = 0; |
336 | } | 350 | } |
351 | out: | ||
352 | if (unlikely(current->audit_context) && !entryexit) | ||
353 | audit_syscall_entry(current, audit_arch(), regs->regs[2], | ||
354 | regs->regs[4], regs->regs[5], | ||
355 | regs->regs[6], regs->regs[7]); | ||
337 | } | 356 | } |
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index 611dee919d50..eee207969c21 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/smp_lock.h> | 24 | #include <linux/smp_lock.h> |
25 | #include <linux/user.h> | 25 | #include <linux/user.h> |
26 | #include <linux/security.h> | 26 | #include <linux/security.h> |
27 | #include <linux/signal.h> | ||
27 | 28 | ||
28 | #include <asm/cpu.h> | 29 | #include <asm/cpu.h> |
29 | #include <asm/fpu.h> | 30 | #include <asm/fpu.h> |
@@ -241,7 +242,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
241 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | 242 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ |
242 | case PTRACE_CONT: { /* restart after signal. */ | 243 | case PTRACE_CONT: { /* restart after signal. */ |
243 | ret = -EIO; | 244 | ret = -EIO; |
244 | if ((unsigned int) data > _NSIG) | 245 | if (!valid_signal(data)) |
245 | break; | 246 | break; |
246 | if (request == PTRACE_SYSCALL) { | 247 | if (request == PTRACE_SYSCALL) { |
247 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | 248 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 598bfe7426a2..ae2a1312d4ef 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -374,22 +374,6 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
374 | } | 374 | } |
375 | 375 | ||
376 | /* | 376 | /* |
377 | * Native ABI that is O32 or N64 version | ||
378 | */ | ||
379 | asmlinkage long sys_shmat(int shmid, char __user *shmaddr, | ||
380 | int shmflg, unsigned long *addr) | ||
381 | { | ||
382 | unsigned long raddr; | ||
383 | int err; | ||
384 | |||
385 | err = do_shmat(shmid, shmaddr, shmflg, &raddr); | ||
386 | if (err) | ||
387 | return err; | ||
388 | |||
389 | return put_user(raddr, addr); | ||
390 | } | ||
391 | |||
392 | /* | ||
393 | * No implemented yet ... | 377 | * No implemented yet ... |
394 | */ | 378 | */ |
395 | asmlinkage int sys_cachectl(char *addr, int nbytes, int op) | 379 | asmlinkage int sys_cachectl(char *addr, int nbytes, int op) |