patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Index: src/sys/kern/kern_jail.c
 | 
						|
diff -c src/sys/kern/kern_jail.c:1.34 src/sys/kern/kern_jail.c:1.34.2.1
 | 
						|
*** sys/kern/kern_jail.c:1.34	Tue Jun 10 19:56:55 2003
 | 
						|
--- sys/kern/kern_jail.c	Thu Feb 19 17:26:39 2004
 | 
						|
***************
 | 
						|
*** 179,186 ****
 | 
						|
  	struct prison *pr;
 | 
						|
  	int error;
 | 
						|
  	
 | 
						|
! 	p = td->td_proc;
 | 
						|
  
 | 
						|
  	mtx_lock(&allprison_mtx);
 | 
						|
  	pr = prison_find(uap->jid);
 | 
						|
  	if (pr == NULL) {
 | 
						|
--- 179,197 ----
 | 
						|
  	struct prison *pr;
 | 
						|
  	int error;
 | 
						|
  	
 | 
						|
! 	/*
 | 
						|
! 	 * XXX: Note that there is a slight race here if two threads
 | 
						|
! 	 * in the same privileged process attempt to attach to two
 | 
						|
! 	 * different jails at the same time.  It is important for
 | 
						|
! 	 * user processes not to do this, or they might end up with
 | 
						|
! 	 * a process root from one prison, but attached to the jail
 | 
						|
! 	 * of another.
 | 
						|
! 	 */
 | 
						|
! 	error = suser(td);
 | 
						|
! 	if (error)
 | 
						|
! 		return (error);
 | 
						|
  
 | 
						|
+ 	p = td->td_proc;
 | 
						|
  	mtx_lock(&allprison_mtx);
 | 
						|
  	pr = prison_find(uap->jid);
 | 
						|
  	if (pr == NULL) {
 | 
						|
***************
 | 
						|
*** 191,199 ****
 | 
						|
  	mtx_unlock(&pr->pr_mtx);
 | 
						|
  	mtx_unlock(&allprison_mtx);
 | 
						|
  
 | 
						|
- 	error = suser_cred(td->td_ucred, PRISON_ROOT);
 | 
						|
- 	if (error)
 | 
						|
- 		goto e_dropref;
 | 
						|
  	mtx_lock(&Giant);
 | 
						|
  	vn_lock(pr->pr_root, LK_EXCLUSIVE | LK_RETRY, td);
 | 
						|
  	if ((error = change_dir(pr->pr_root, td)) != 0)
 | 
						|
--- 202,207 ----
 | 
						|
***************
 | 
						|
*** 208,220 ****
 | 
						|
  
 | 
						|
  	newcred = crget();
 | 
						|
  	PROC_LOCK(p);
 | 
						|
- 	/* Implicitly fail if already in jail.  */
 | 
						|
- 	error = suser_cred(p->p_ucred, 0);
 | 
						|
- 	if (error) {
 | 
						|
- 		PROC_UNLOCK(p);
 | 
						|
- 		crfree(newcred);
 | 
						|
- 		goto e_dropref;
 | 
						|
- 	}
 | 
						|
  	oldcred = p->p_ucred;
 | 
						|
  	setsugid(p);
 | 
						|
  	crcopy(newcred, oldcred);
 | 
						|
--- 216,221 ----
 | 
						|
***************
 | 
						|
*** 226,232 ****
 | 
						|
  e_unlock:
 | 
						|
  	VOP_UNLOCK(pr->pr_root, 0, td);
 | 
						|
  	mtx_unlock(&Giant);
 | 
						|
- e_dropref:
 | 
						|
  	mtx_lock(&pr->pr_mtx);
 | 
						|
  	pr->pr_ref--;
 | 
						|
  	mtx_unlock(&pr->pr_mtx);
 | 
						|
--- 227,232 ----
 |