diff --git a/sys/miscfs/procfs/procfs_vnops.c b/sys/miscfs/procfs/procfs_vnops.c index a61d20996f0b..e3a18a75b663 100644 --- a/sys/miscfs/procfs/procfs_vnops.c +++ b/sys/miscfs/procfs/procfs_vnops.c @@ -1,4 +1,4 @@ -/* $NetBSD: procfs_vnops.c,v 1.140 2006/11/28 17:27:09 elad Exp $ */ +/* $NetBSD: procfs_vnops.c,v 1.141 2006/12/03 13:24:10 elad Exp $ */ /* * Copyright (c) 1993, 1995 @@ -76,7 +76,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.140 2006/11/28 17:27:09 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.141 2006/12/03 13:24:10 elad Exp $"); #include #include @@ -93,7 +93,6 @@ __KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.140 2006/11/28 17:27:09 elad Exp #include #include #include -#include /* XXX for curtain */ #include #include /* for PAGE_SIZE */ @@ -291,25 +290,28 @@ procfs_open(v) if (ISSET(p2->p_flag, P_INEXEC)) return (EAGAIN); -#define M2K(m) (((m) & FREAD) && ((m) & FWRITE) ? \ - KAUTH_REQ_PROCESS_CANPROCFS_RW : \ - (m) & FWRITE ? KAUTH_REQ_PROCESS_CANPROCFS_WRITE : \ - KAUTH_REQ_PROCESS_CANPROCFS_READ) - error = kauth_authorize_process(l1->l_cred, KAUTH_PROCESS_CANPROCFS, - p2, pfs, KAUTH_ARG(M2K(ap->a_mode)), NULL); - if (error) - return (error); -#undef M2K - - if (!proc_isunder(p2, l1)) - return (EPERM); - switch (pfs->pfs_type) { case PFSmem: if (((pfs->pfs_flags & FWRITE) && (ap->a_mode & O_EXCL)) || ((pfs->pfs_flags & O_EXCL) && (ap->a_mode & FWRITE))) return (EBUSY); +#define M2K(m) (((m) & FREAD) && ((m) & FWRITE) ? \ + KAUTH_REQ_PROCESS_CANPROCFS_RW : \ + (m) & FWRITE ? KAUTH_REQ_PROCESS_CANPROCFS_WRITE : \ + KAUTH_REQ_PROCESS_CANPROCFS_READ) + + error = kauth_authorize_process(l1->l_cred, + KAUTH_PROCESS_CANPROCFS, p2, pfs, + KAUTH_ARG(M2K(ap->a_mode)), NULL); + if (error) + return (error); + +#undef M2K + + if (!proc_isunder(p2, l1)) + return (EPERM); + if (ap->a_mode & FWRITE) pfs->pfs_flags = ap->a_mode & (FWRITE|O_EXCL);