CRED: Wrap task credential accesses in the IA64 arch
David Howells [Thu, 13 Nov 2008 23:38:37 +0000 (10:38 +1100)]
Wrap access to task credentials so that they can be separated more easily from
the task_struct during the introduction of COW creds.

Change most current->(|e|s|fs)[ug]id to current_(|e|s|fs)[ug]id().

Change some task->e?[ug]id to task_e?[ug]id().  In some places it makes more
sense to use RCU directly rather than a convenient wrapper; these will be
addressed by later patches.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: James Morris <jmorris@namei.org>
Acked-by: Serge Hallyn <serue@us.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-ia64@vger.kernel.org
Signed-off-by: James Morris <jmorris@namei.org>

arch/ia64/kernel/mca_drv.c
arch/ia64/kernel/perfmon.c
arch/ia64/kernel/signal.c

index fab1d21..f94aaa8 100644 (file)
@@ -158,7 +158,7 @@ mca_handler_bh(unsigned long paddr, void *iip, unsigned long ipsr)
        ia64_mlogbuf_dump();
        printk(KERN_ERR "OS_MCA: process [cpu %d, pid: %d, uid: %d, "
                "iip: %p, psr: 0x%lx,paddr: 0x%lx](%s) encounters MCA.\n",
-               raw_smp_processor_id(), current->pid, current->uid,
+              raw_smp_processor_id(), current->pid, current_uid(),
                iip, ipsr, paddr, current->comm);
 
        spin_lock(&mca_bh_lock);
index 6543a55..dd38db4 100644 (file)
@@ -2220,8 +2220,8 @@ pfm_alloc_file(pfm_context_t *ctx)
        DPRINT(("new inode ino=%ld @%p\n", inode->i_ino, inode));
 
        inode->i_mode = S_IFCHR|S_IRUGO;
-       inode->i_uid  = current->fsuid;
-       inode->i_gid  = current->fsgid;
+       inode->i_uid  = current_fsuid();
+       inode->i_gid  = current_fsgid();
 
        sprintf(name, "[%lu]", inode->i_ino);
        this.name = name;
@@ -2399,22 +2399,25 @@ error_kmem:
 static int
 pfm_bad_permissions(struct task_struct *task)
 {
+       uid_t uid = current_uid();
+       gid_t gid = current_gid();
+
        /* inspired by ptrace_attach() */
        DPRINT(("cur: uid=%d gid=%d task: euid=%d suid=%d uid=%d egid=%d sgid=%d\n",
-               current->uid,
-               current->gid,
+               uid,
+               gid,
                task->euid,
                task->suid,
                task->uid,
                task->egid,
                task->sgid));
 
-       return ((current->uid != task->euid)
-           || (current->uid != task->suid)
-           || (current->uid != task->uid)
-           || (current->gid != task->egid)
-           || (current->gid != task->sgid)
-           || (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE);
+       return (uid != task->euid)
+           || (uid != task->suid)
+           || (uid != task->uid)
+           || (gid != task->egid)
+           || (gid != task->sgid)
+           || (gid != task->gid)) && !capable(CAP_SYS_PTRACE);
 }
 
 static int
index e12500a..e1821ca 100644 (file)
@@ -229,7 +229,7 @@ ia64_rt_sigreturn (struct sigscratch *scr)
        si.si_errno = 0;
        si.si_code = SI_KERNEL;
        si.si_pid = task_pid_vnr(current);
-       si.si_uid = current->uid;
+       si.si_uid = current_uid();
        si.si_addr = sc;
        force_sig_info(SIGSEGV, &si, current);
        return retval;
@@ -326,7 +326,7 @@ force_sigsegv_info (int sig, void __user *addr)
        si.si_errno = 0;
        si.si_code = SI_KERNEL;
        si.si_pid = task_pid_vnr(current);
-       si.si_uid = current->uid;
+       si.si_uid = current_uid();
        si.si_addr = addr;
        force_sig_info(SIGSEGV, &si, current);
        return 0;