From owner-p4-projects@FreeBSD.ORG Wed Jul 19 18:39:29 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6DEF816A4E1; Wed, 19 Jul 2006 18:39:29 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4412A16A4DE for ; Wed, 19 Jul 2006 18:39:29 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C7ED943D49 for ; Wed, 19 Jul 2006 18:39:28 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k6JIdSBG075036 for ; Wed, 19 Jul 2006 18:39:28 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k6JIdSce075033 for perforce@freebsd.org; Wed, 19 Jul 2006 18:39:28 GMT (envelope-from jhb@freebsd.org) Date: Wed, 19 Jul 2006 18:39:28 GMT Message-Id: <200607191839.k6JIdSce075033@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 101953 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Jul 2006 18:39:29 -0000 http://perforce.freebsd.org/chv.cgi?CH=101953 Change 101953 by jhb@jhb_mutex on 2006/07/19 18:39:19 - Fixes to fchroot(): - vput() the vnode if any of the checks fail - vrele() the vnode after change_root() to drop our earlier VREF(). - Fixes to waitsys(): - Compile fixes since ru isn't a pointer. - Fix a few more places that have q vs p mixed up since I switched them to match the usage in kern_wait(). Affected files ... .. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#54 edit Differences ... ==== //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#54 (text+ko) ==== @@ -620,13 +620,20 @@ vfslocked = VFS_LOCK_GIANT(vp->v_mount); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); error = change_dir(vp, td); + if (error) + goto fail; #ifdef MAC - if (error == 0) - error = mac_check_vnode_chroot(td->td_ucred, vp); + error = mac_check_vnode_chroot(td->td_ucred, vp); + if (error) + goto fail; #endif VOP_UNLOCK(vp, 0, td); - if (error == 0) - error = change_root(vp, td); + error = change_root(vp, td); + vrele(vp); + VFS_UNLOCK_GIANT(vfslocked); + return (error); +fail: + vput(vp); VFS_UNLOCK_GIANT(vfslocked); return (error); } @@ -1138,7 +1145,7 @@ pid_t pid; int nfound, status; int error, *retval = td->td_retval; - struct proc *p, *q, *t; + struct proc *p, *q; DPRINTF(("waitsys(%d, %d, %p, %x)\n", uap->grp, uap->id, @@ -1151,9 +1158,9 @@ break; case SVR4_P_PGID: - PROC_LOCK(p); + PROC_LOCK(q); pid = -q->p_pgid; - PROC_UNLOCK(p); + PROC_UNLOCK(q); break; case SVR4_P_ALL: @@ -1204,7 +1211,7 @@ PROC_LOCK(p); if (pid != WAIT_ANY && p->p_pid != pid && p->p_pgid != -pid) { - PROC_UNLOCK(q); + PROC_UNLOCK(p); DPRINTF(("pid %d pgid %d != %d\n", p->p_pid, p->p_pgid, pid)); continue; @@ -1228,8 +1235,8 @@ /* Found a zombie, so cache info in local variables. */ pid = p->p_pid; status = p->p_xstat; - ru = p->p_ru; - calcru(p, &ru->ru_utime, &ru->ru_stime); + ru = *p->p_ru; + calcru(p, &ru.ru_utime, &ru.ru_stime); PROC_UNLOCK(p); sx_sunlock(&proctree_lock); @@ -1254,8 +1261,8 @@ sx_sunlock(&proctree_lock); pid = p->p_pid; status = W_STOPCODE(p->p_xstat); - ru = p->p_ru; - calcru(p, &ru->ru_utime, &ru->ru_stime); + ru = *p->p_ru; + calcru(p, &ru.ru_utime, &ru.ru_stime); PROC_UNLOCK(p); if (((uap->options & SVR4_WNOWAIT)) == 0) { @@ -1275,9 +1282,9 @@ if (((uap->options & SVR4_WNOWAIT)) == 0) p->p_flag &= ~P_CONTINUED; pid = p->p_pid; - ru = p->p_ru; + ru = *p->p_ru; status = SIGCONT; - calcru(p, &ru->ru_utime, &ru->ru_stime); + calcru(p, &ru.ru_utime, &ru.ru_stime); PROC_UNLOCK(p); if (((uap->options & SVR4_WNOWAIT)) == 0) {