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

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

CRED: Rename cred_exec_mutex to reflect that it's a guard against ptrace



Rename cred_exec_mutex to reflect that it's a guard against foreign
intervention on a process's credential state, such as is made by ptrace().  The
attachment of a debugger to a process affects execve()'s calculation of the new
credential state - _and_ also setprocattr()'s calculation of that state.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarJames Morris <jmorris@namei.org>
parent d2541170
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1488,7 +1488,7 @@ int compat_do_execve(char * filename,
	if (!bprm)
		goto out_files;

	retval = mutex_lock_interruptible(&current->cred_exec_mutex);
	retval = mutex_lock_interruptible(&current->cred_guard_mutex);
	if (retval < 0)
		goto out_free;
	current->in_execve = 1;
@@ -1550,7 +1550,7 @@ int compat_do_execve(char * filename,
	/* execve succeeded */
	current->fs->in_exec = 0;
	current->in_execve = 0;
	mutex_unlock(&current->cred_exec_mutex);
	mutex_unlock(&current->cred_guard_mutex);
	acct_update_integrals(current);
	free_bprm(bprm);
	if (displaced)
@@ -1573,7 +1573,7 @@ int compat_do_execve(char * filename,

out_unlock:
	current->in_execve = 0;
	mutex_unlock(&current->cred_exec_mutex);
	mutex_unlock(&current->cred_guard_mutex);

out_free:
	free_bprm(bprm);
+5 −5
Original line number Diff line number Diff line
@@ -1045,7 +1045,7 @@ void install_exec_creds(struct linux_binprm *bprm)
	commit_creds(bprm->cred);
	bprm->cred = NULL;

	/* cred_exec_mutex must be held at least to this point to prevent
	/* cred_guard_mutex must be held at least to this point to prevent
	 * ptrace_attach() from altering our determination of the task's
	 * credentials; any time after this it may be unlocked */

@@ -1055,7 +1055,7 @@ EXPORT_SYMBOL(install_exec_creds);

/*
 * determine how safe it is to execute the proposed program
 * - the caller must hold current->cred_exec_mutex to protect against
 * - the caller must hold current->cred_guard_mutex to protect against
 *   PTRACE_ATTACH
 */
int check_unsafe_exec(struct linux_binprm *bprm)
@@ -1297,7 +1297,7 @@ int do_execve(char * filename,
	if (!bprm)
		goto out_files;

	retval = mutex_lock_interruptible(&current->cred_exec_mutex);
	retval = mutex_lock_interruptible(&current->cred_guard_mutex);
	if (retval < 0)
		goto out_free;
	current->in_execve = 1;
@@ -1360,7 +1360,7 @@ int do_execve(char * filename,
	/* execve succeeded */
	current->fs->in_exec = 0;
	current->in_execve = 0;
	mutex_unlock(&current->cred_exec_mutex);
	mutex_unlock(&current->cred_guard_mutex);
	acct_update_integrals(current);
	free_bprm(bprm);
	if (displaced)
@@ -1383,7 +1383,7 @@ int do_execve(char * filename,

out_unlock:
	current->in_execve = 0;
	mutex_unlock(&current->cred_exec_mutex);
	mutex_unlock(&current->cred_guard_mutex);

out_free:
	free_bprm(bprm);
+2 −2
Original line number Diff line number Diff line
@@ -145,8 +145,8 @@ extern struct cred init_cred;
	.group_leader	= &tsk,						\
	.real_cred	= &init_cred,					\
	.cred		= &init_cred,					\
	.cred_exec_mutex =						\
		 __MUTEX_INITIALIZER(tsk.cred_exec_mutex),		\
	.cred_guard_mutex =						\
		 __MUTEX_INITIALIZER(tsk.cred_guard_mutex),		\
	.comm		= "swapper",					\
	.thread		= INIT_THREAD,					\
	.fs		= &init_fs,					\
+3 −1
Original line number Diff line number Diff line
@@ -1247,7 +1247,9 @@ struct task_struct {
					 * credentials (COW) */
	const struct cred *cred;	/* effective (overridable) subjective task
					 * credentials (COW) */
	struct mutex cred_exec_mutex;	/* execve vs ptrace cred calculation mutex */
	struct mutex cred_guard_mutex;	/* guard against foreign influences on
					 * credential calculations
					 * (notably. ptrace) */

	char comm[TASK_COMM_LEN]; /* executable name excluding path
				     - access with [gs]et_task_comm (which lock
+2 −2
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ EXPORT_SYMBOL(prepare_creds);

/*
 * Prepare credentials for current to perform an execve()
 * - The caller must hold current->cred_exec_mutex
 * - The caller must hold current->cred_guard_mutex
 */
struct cred *prepare_exec_creds(void)
{
@@ -276,7 +276,7 @@ int copy_creds(struct task_struct *p, unsigned long clone_flags)
	struct cred *new;
	int ret;

	mutex_init(&p->cred_exec_mutex);
	mutex_init(&p->cred_guard_mutex);

	if (
#ifdef CONFIG_KEYS
Loading