]> git.hungrycats.org Git - linux/commitdiff
[SPARC32]: Synchronize with 2.5.x changes
authorDavid S. Miller <davem@nuts.ninka.net>
Fri, 23 Aug 2002 21:09:31 +0000 (14:09 -0700)
committerDavid S. Miller <davem@nuts.ninka.net>
Fri, 23 Aug 2002 21:09:31 +0000 (14:09 -0700)
- Some places need to include sched.h because the already include ptrace.h
- CLONE_{SET,CLEAR}TID support
- Clear PT_DTRACE when execve succeeds.
- Add security bits to ptrace
- Add sys_security to syscall tables.

arch/sparc/kernel/irq.c
arch/sparc/kernel/process.c
arch/sparc/kernel/ptrace.c
arch/sparc/kernel/sun4c_irq.c
arch/sparc/kernel/sun4d_irq.c
arch/sparc/kernel/sun4m_irq.c
arch/sparc/kernel/systbls.S
arch/sparc/mm/fault.c
include/asm-sparc/unistd.h

index 7f3d25161cf46700f46af4a777e1763fe2c54a1c..265bc70079159df9a6492205ced8e63cbe5aa824 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include <linux/config.h>
+#include <linux/sched.h>
 #include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/linkage.h>
index 02f44601f7942713abd1e0d377846c85778b12d1..73572be45b3eda5416419d763a660039a0f1bbc5 100644 (file)
@@ -508,6 +508,8 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
 #endif
        }
 
+       p->user_tid = NULL;
+
        /* Calculate offset to stack_frame & pt_regs */
        stack_offset = THREAD_SIZE - TRACEREG_SZ;
 
@@ -581,6 +583,16 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
        /* Set the return value for the parent. */
        regs->u_regs[UREG_I1] = 0;
 
+       if (!(clone_flags & (CLONE_SETTID | CLONE_CLEARTID)))
+               return 0;
+
+       if (clone_flags & CLONE_SETTID)
+               if (put_user(p->pid, (int *)childregs->u_regs[UREG_G2]))
+                       return -EFAULT;
+
+       if (clone_flags & CLONE_CLEARTID)
+               p->user_tid = (int *) childregs->u_regs[UREG_G2];
+
        return 0;
 }
 
@@ -681,6 +693,8 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
        error = do_execve(filename, (char **) regs->u_regs[base + UREG_I1],
                          (char **) regs->u_regs[base + UREG_I2], regs);
        putname(filename);
+       if (error == 0)
+               current->ptrace &= ~PT_DTRACE;
 out:
        return error;
 }
index 64ad47d9de3502566fdd0e53b0b41af267473721..e7daf14ea25d504de7228530d639020c3da2f943 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/user.h>
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
+#include <linux/security.h>
 
 #include <asm/pgtable.h>
 #include <asm/system.h>
@@ -283,11 +284,19 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
        }
 #endif
        if(request == PTRACE_TRACEME) {
+               int ret;
+
                /* are we already being traced? */
                if (current->ptrace & PT_PTRACED) {
                        pt_error_return(regs, EPERM);
                        goto out;
                }
+               ret = security_ops->ptrace(current->parent, current);
+               if (ret) {
+                       pt_error_return(regs, -ret);
+                       goto out;
+               }
+
                /* set the ptrace bit in the process flags. */
                current->ptrace |= PT_PTRACED;
                pt_succ_return(regs, 0);
index 995d3bfb5fa4b80016e9ff094af102be824da3f6..e07203067d5a23084e0e630e504f7da08923d3d2 100644 (file)
  */
 
 #include <linux/config.h>
-#include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/linkage.h>
 #include <linux/kernel_stat.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
+#include <linux/ptrace.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 #include <linux/init.h>
index 887cc8b1b32fe9d90a0f0f3ace2b454324550cb6..22d4a2db6eac0a3b27fea19d9b97a218f94c02d4 100644 (file)
@@ -7,12 +7,12 @@
  */
 
 #include <linux/config.h>
-#include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/linkage.h>
 #include <linux/kernel_stat.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
+#include <linux/ptrace.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 #include <linux/random.h>
index 0e2ee8545a9c39c86ed1beafe5c8b42cf0de8416..fdcd32f37e5e78ff1996b6564017a5c838b9487d 100644 (file)
  */
 
 #include <linux/config.h>
-#include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/linkage.h>
 #include <linux/kernel_stat.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
+#include <linux/ptrace.h>
 #include <linux/smp.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
index dc9a659df26e4dfd83642fa85daf4174ea7059c7..6a7a3adb11cf78cea4b370f3388907e1d414493c 100644 (file)
@@ -49,7 +49,7 @@ sys_call_table:
 /*140*/        .long sys_sendfile64, sys_nis_syscall, sys_futex, sys_gettid, sys_getrlimit
 /*145*/        .long sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write
 /*150*/        .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
-/*155*/        .long sys_fcntl64, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
+/*155*/        .long sys_fcntl64, sys_security, sys_statfs, sys_fstatfs, sys_oldumount
 /*160*/        .long sys_sched_setaffinity, sys_sched_getaffinity, sys_getdomainname, sys_setdomainname, sys_nis_syscall
 /*165*/        .long sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_setxattr
 /*170*/        .long sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents
index 8c54f26b318d391fd33228eaf803674d63ab13e4..49eccf61be1d26c0400c634c793f5053bc6839ec 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <linux/string.h>
 #include <linux/types.h>
+#include <linux/sched.h>
 #include <linux/ptrace.h>
 #include <linux/mman.h>
 #include <linux/threads.h>
index 1ce9b3b7a2262117bc97e99dc9d33afee1494b07..e89bb817c80f623224fc23b667aa7f037435746d 100644 (file)
 #define __NR_poll               153 /* Common                                      */
 #define __NR_getdents64                154 /* Linux specific                              */
 #define __NR_fcntl64           155 /* Linux sparc32 Specific                      */
-/* #define __NR_getdirentries   156    SunOS Specific                              */
+#define __NR_security           156 /* getdirentries under SunOS                   */
 #define __NR_statfs             157 /* Common                                      */
 #define __NR_fstatfs            158 /* Common                                      */
 #define __NR_umount             159 /* Common                                      */