Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef81ee98 authored by David Howells's avatar David Howells Committed by James Morris
Browse files

CRED: Wrap task credential accesses in the IA64 arch



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: default avatarDavid Howells <dhowells@redhat.com>
Reviewed-by: default avatarJames Morris <jmorris@namei.org>
Acked-by: default avatarSerge Hallyn <serue@us.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-ia64@vger.kernel.org
Signed-off-by: default avatarJames Morris <jmorris@namei.org>
parent 92a77aac
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+13 −10
Original line number Diff line number Diff line
@@ -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 @@ pfm_smpl_buffer_alloc(struct task_struct *task, struct file *filp, pfm_context_t
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
+2 −2
Original line number Diff line number Diff line
@@ -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;