Author: des
Date: Mon Feb 16 15:17:26 2009
New Revision: 188677
URL: http://svn.freebsd.org/changeset/base/188677

Log:
  Fix a logic bug that caused the pfs_attr method to be called only for
  PFS_PROCDEP nodes.
  
  Submitted by: Andrew Brampton <[email protected]>
  MFC after:    2 weeks

Modified:
  head/sys/fs/procfs/procfs.c
  head/sys/fs/pseudofs/pseudofs_vnops.c

Modified: head/sys/fs/procfs/procfs.c
==============================================================================
--- head/sys/fs/procfs/procfs.c Mon Feb 16 15:10:51 2009        (r188676)
+++ head/sys/fs/procfs/procfs.c Mon Feb 16 15:17:26 2009        (r188677)
@@ -99,7 +99,6 @@ procfs_docurproc(PFS_FILL_ARGS)
 int
 procfs_attr(PFS_ATTR_ARGS)
 {
-       PROC_LOCK_ASSERT(p, MA_OWNED);
 
        /* XXX inefficient, split into separate functions */
        if (strcmp(pn->pn_name, "ctl") == 0 ||
@@ -112,11 +111,12 @@ procfs_attr(PFS_ATTR_ARGS)
            strcmp(pn->pn_name, "fpregs") == 0)
                vap->va_mode = 0600;
 
-       if ((p->p_flag & P_SUGID) && pn->pn_type != pfstype_procdir)
-               vap->va_mode = 0;
+       if (p != NULL) {
+               PROC_LOCK_ASSERT(p, MA_OWNED);
 
-       vap->va_uid = p->p_ucred->cr_uid;
-       vap->va_gid = p->p_ucred->cr_gid;
+               if ((p->p_flag & P_SUGID) && pn->pn_type != pfstype_procdir)
+                       vap->va_mode = 0;
+       }
 
        return (0);
 }

Modified: head/sys/fs/pseudofs/pseudofs_vnops.c
==============================================================================
--- head/sys/fs/pseudofs/pseudofs_vnops.c       Mon Feb 16 15:10:51 2009        
(r188676)
+++ head/sys/fs/pseudofs/pseudofs_vnops.c       Mon Feb 16 15:17:26 2009        
(r188677)
@@ -226,14 +226,17 @@ pfs_getattr(struct vop_getattr_args *va)
        if (proc != NULL) {
                vap->va_uid = proc->p_ucred->cr_ruid;
                vap->va_gid = proc->p_ucred->cr_rgid;
-               if (pn->pn_attr != NULL)
-                       error = pn_attr(curthread, proc, pn, vap);
-               PROC_UNLOCK(proc);
        } else {
                vap->va_uid = 0;
                vap->va_gid = 0;
        }
 
+       if (pn->pn_attr != NULL)
+               error = pn_attr(curthread, proc, pn, vap);
+
+       if(proc != NULL)
+               PROC_UNLOCK(proc);
+
        PFS_RETURN (error);
 }
 
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to