Commit 99c31f9f authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

ucounts: In set_cred_ucounts assume new->ucounts is non-NULL

Any cred that is destined for use by commit_creds must have a non-NULL
cred->ucounts field.  Only curing credential construction is a NULL
cred->ucounts valid.  Only abort_creds, put_cred, and put_cred_rcu
needs to deal with a cred with a NULL ucount.  As set_cred_ucounts is
non of those case don't confuse people by handling something that can
not happen.

Link: https://lkml.kernel.org/r/871r4irzds.fsf_-_@disp2133


Tested-by: default avatarYu Zhao <yuzhao@google.com>
Reviewed-by: default avatarAlexey Gladkov <legion@kernel.org>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 5ebcbe34
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -676,14 +676,13 @@ int set_cred_ucounts(struct cred *new)
	 * This optimization is needed because alloc_ucounts() uses locks
	 * for table lookups.
	 */
	if (old_ucounts && old_ucounts->ns == new->user_ns && uid_eq(old_ucounts->uid, new->euid))
	if (old_ucounts->ns == new->user_ns && uid_eq(old_ucounts->uid, new->euid))
		return 0;

	if (!(new_ucounts = alloc_ucounts(new->user_ns, new->euid)))
		return -EAGAIN;

	new->ucounts = new_ucounts;
	if (old_ucounts)
	put_ucounts(old_ucounts);

	return 0;