svn commit: r335536 - stable/11/sys/kern
Andriy Gapon
avg at FreeBSD.org
Fri Jun 22 09:18:40 UTC 2018
Author: avg
Date: Fri Jun 22 09:18:38 2018
New Revision: 335536
URL: https://svnweb.freebsd.org/changeset/base/335536
Log:
MFC r332816: call racct_proc_ucred_changed() under the proc lock
Modified:
stable/11/sys/kern/kern_jail.c
stable/11/sys/kern/kern_loginclass.c
stable/11/sys/kern/kern_prot.c
stable/11/sys/kern/kern_racct.c
stable/11/sys/kern/kern_rctl.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/kern_jail.c
==============================================================================
--- stable/11/sys/kern/kern_jail.c Fri Jun 22 09:10:50 2018 (r335535)
+++ stable/11/sys/kern/kern_jail.c Fri Jun 22 09:18:38 2018 (r335536)
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/racct.h>
+#include <sys/rctl.h>
#include <sys/refcount.h>
#include <sys/sx.h>
#include <sys/sysent.h>
@@ -2409,10 +2410,15 @@ do_jail_attach(struct thread *td, struct prison *pr)
newcred->cr_prison = pr;
proc_set_cred(p, newcred);
setsugid(p);
- PROC_UNLOCK(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
+ crhold(newcred);
#endif
+ PROC_UNLOCK(p);
+#ifdef RCTL
+ rctl_proc_ucred_changed(p, newcred);
+ crfree(newcred);
+#endif
prison_deref(oldcred->cr_prison, PD_DEREF | PD_DEUREF);
crfree(oldcred);
return (0);
@@ -3959,6 +3965,7 @@ prison_racct_modify(struct prison *pr)
*/
racct_move(pr->pr_prison_racct->prr_racct, oldprr->prr_racct);
+#ifdef RCTL
/*
* Force rctl to reattach rules to processes.
*/
@@ -3966,9 +3973,10 @@ prison_racct_modify(struct prison *pr)
PROC_LOCK(p);
cred = crhold(p->p_ucred);
PROC_UNLOCK(p);
- racct_proc_ucred_changed(p, cred, cred);
+ rctl_proc_ucred_changed(p, cred);
crfree(cred);
}
+#endif
sx_sunlock(&allproc_lock);
prison_racct_free_locked(oldprr);
Modified: stable/11/sys/kern/kern_loginclass.c
==============================================================================
--- stable/11/sys/kern/kern_loginclass.c Fri Jun 22 09:10:50 2018 (r335535)
+++ stable/11/sys/kern/kern_loginclass.c Fri Jun 22 09:18:38 2018 (r335536)
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/queue.h>
#include <sys/racct.h>
+#include <sys/rctl.h>
#include <sys/refcount.h>
#include <sys/rwlock.h>
#include <sys/sysproto.h>
@@ -222,9 +223,14 @@ sys_setloginclass(struct thread *td, struct setlogincl
oldcred = crcopysafe(p, newcred);
newcred->cr_loginclass = newlc;
proc_set_cred(p, newcred);
- PROC_UNLOCK(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
+ crhold(newcred);
+#endif
+ PROC_UNLOCK(p);
+#ifdef RCTL
+ rctl_proc_ucred_changed(p, newcred);
+ crfree(newcred);
#endif
loginclass_free(oldcred->cr_loginclass);
crfree(oldcred);
Modified: stable/11/sys/kern/kern_prot.c
==============================================================================
--- stable/11/sys/kern/kern_prot.c Fri Jun 22 09:10:50 2018 (r335535)
+++ stable/11/sys/kern/kern_prot.c Fri Jun 22 09:18:38 2018 (r335536)
@@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$");
#include <sys/jail.h>
#include <sys/pioctl.h>
#include <sys/racct.h>
+#include <sys/rctl.h>
#include <sys/resourcevar.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
@@ -579,10 +580,15 @@ sys_setuid(struct thread *td, struct setuid_args *uap)
setsugid(p);
}
proc_set_cred(p, newcred);
- PROC_UNLOCK(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
+ crhold(newcred);
#endif
+ PROC_UNLOCK(p);
+#ifdef RCTL
+ rctl_proc_ucred_changed(p, newcred);
+ crfree(newcred);
+#endif
uifree(uip);
crfree(oldcred);
return (0);
@@ -927,10 +933,15 @@ sys_setreuid(struct thread *td, struct setreuid_args *
setsugid(p);
}
proc_set_cred(p, newcred);
- PROC_UNLOCK(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
+ crhold(newcred);
#endif
+ PROC_UNLOCK(p);
+#ifdef RCTL
+ rctl_proc_ucred_changed(p, newcred);
+ crfree(newcred);
+#endif
uifree(ruip);
uifree(euip);
crfree(oldcred);
@@ -1068,9 +1079,14 @@ sys_setresuid(struct thread *td, struct setresuid_args
setsugid(p);
}
proc_set_cred(p, newcred);
- PROC_UNLOCK(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
+ crhold(newcred);
+#endif
+ PROC_UNLOCK(p);
+#ifdef RCTL
+ rctl_proc_ucred_changed(p, newcred);
+ crfree(newcred);
#endif
uifree(ruip);
uifree(euip);
Modified: stable/11/sys/kern/kern_racct.c
==============================================================================
--- stable/11/sys/kern/kern_racct.c Fri Jun 22 09:10:50 2018 (r335535)
+++ stable/11/sys/kern/kern_racct.c Fri Jun 22 09:18:38 2018 (r335536)
@@ -1048,7 +1048,7 @@ racct_proc_ucred_changed(struct proc *p, struct ucred
if (!racct_enable)
return;
- PROC_LOCK_ASSERT(p, MA_NOTOWNED);
+ PROC_LOCK_ASSERT(p, MA_OWNED);
newuip = newcred->cr_ruidinfo;
olduip = oldcred->cr_ruidinfo;
@@ -1075,10 +1075,6 @@ racct_proc_ucred_changed(struct proc *p, struct ucred
p->p_racct);
}
RACCT_UNLOCK();
-
-#ifdef RCTL
- rctl_proc_ucred_changed(p, newcred);
-#endif
}
void
Modified: stable/11/sys/kern/kern_rctl.c
==============================================================================
--- stable/11/sys/kern/kern_rctl.c Fri Jun 22 09:10:50 2018 (r335535)
+++ stable/11/sys/kern/kern_rctl.c Fri Jun 22 09:18:38 2018 (r335536)
@@ -1954,12 +1954,15 @@ rctl_proc_ucred_changed(struct proc *p, struct ucred *
struct prison_racct *newprr;
int rulecnt, i;
- ASSERT_RACCT_ENABLED();
+ if (!racct_enable)
+ return;
+ PROC_LOCK_ASSERT(p, MA_NOTOWNED);
+
newuip = newcred->cr_ruidinfo;
newlc = newcred->cr_loginclass;
newprr = newcred->cr_prison->pr_prison_racct;
-
+
LIST_INIT(&newrules);
again:
More information about the svn-src-all
mailing list