svn commit: r361448 - in head/sys: kern sys

Mateusz Guzik mjg at FreeBSD.org
Mon May 25 12:41:46 UTC 2020


Author: mjg
Date: Mon May 25 12:41:44 2020
New Revision: 361448
URL: https://svnweb.freebsd.org/changeset/base/361448

Log:
  proc: refactor clearing credentials into proc_unset_cred

Modified:
  head/sys/kern/kern_exit.c
  head/sys/kern/kern_prot.c
  head/sys/sys/ucred.h

Modified: head/sys/kern/kern_exit.c
==============================================================================
--- head/sys/kern/kern_exit.c	Mon May 25 12:37:45 2020	(r361447)
+++ head/sys/kern/kern_exit.c	Mon May 25 12:41:44 2020	(r361448)
@@ -928,8 +928,7 @@ proc_reap(struct thread *td, struct proc *p, int *stat
 	/*
 	 * Free credentials, arguments, and sigacts.
 	 */
-	crfree(p->p_ucred);
-	proc_set_cred(p, NULL);
+	proc_unset_cred(p);
 	pargs_drop(p->p_args);
 	p->p_args = NULL;
 	sigacts_free(p->p_sigacts);

Modified: head/sys/kern/kern_prot.c
==============================================================================
--- head/sys/kern/kern_prot.c	Mon May 25 12:37:45 2020	(r361447)
+++ head/sys/kern/kern_prot.c	Mon May 25 12:41:44 2020	(r361448)
@@ -2000,14 +2000,20 @@ proc_set_cred(struct proc *p, struct ucred *newcred)
 {
 
 	MPASS(p->p_ucred != NULL);
-	if (newcred == NULL)
-		MPASS(p->p_state == PRS_ZOMBIE);
-	else
-		PROC_LOCK_ASSERT(p, MA_OWNED);
-
+	PROC_LOCK_ASSERT(p, MA_OWNED);
 	p->p_ucred = newcred;
-	if (newcred != NULL)
-		PROC_UPDATE_COW(p);
+	PROC_UPDATE_COW(p);
+}
+
+void
+proc_unset_cred(struct proc *p)
+{
+	struct ucred *cr;
+
+	MPASS(p->p_state == PRS_ZOMBIE);
+	cr = p->p_ucred;
+	p->p_ucred = NULL;
+	crfree(cr);
 }
 
 struct ucred *

Modified: head/sys/sys/ucred.h
==============================================================================
--- head/sys/sys/ucred.h	Mon May 25 12:37:45 2020	(r361447)
+++ head/sys/sys/ucred.h	Mon May 25 12:41:44 2020	(r361448)
@@ -113,6 +113,7 @@ struct ucred	*crdup(struct ucred *cr);
 void	crextend(struct ucred *cr, int n);
 void	proc_set_cred_init(struct proc *p, struct ucred *cr);
 void	proc_set_cred(struct proc *p, struct ucred *cr);
+void	proc_unset_cred(struct proc *p);
 void	crfree(struct ucred *cr);
 struct ucred	*crget(void);
 struct ucred	*crhold(struct ucred *cr);


More information about the svn-src-all mailing list