priv: Use PRIV_VFS_SETGID
authorMichael Neumann <mneumann@ntecs.de>
Sun, 12 Jul 2009 21:16:57 +0000 (23:16 +0200)
committerMichael Neumann <mneumann@ntecs.de>
Sun, 12 Jul 2009 21:16:57 +0000 (23:16 +0200)
Note that in case of UFS, the priv_cred_check() call will now
succeed in a jail, whereas it failed before.

sys/kern/kern_jail.c
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/ufs/ufs_vnops.c

index 05440f6..3b0db0e 100644 (file)
@@ -691,6 +691,7 @@ prison_priv_check(struct ucred *cred, int priv)
        case PRIV_VFS_MKNOD_WHT:
        case PRIV_VFS_MKNOD_DIR:
        case PRIV_VFS_SETATTR:
+       case PRIV_VFS_SETGID:
 
        case PRIV_PROC_SETRLIMIT:
        case PRIV_PROC_SETLOGIN:
index 6d037a7..1286854 100644 (file)
@@ -1203,7 +1203,7 @@ ext2_makeinode(int mode, struct vnode *dvp, struct vnode **vpp,
        tvp->v_type = IFTOVT(mode);     /* Rest init'd in getnewvnode(). */
        ip->i_nlink = 1;
        if ((ip->i_mode & ISGID) && !groupmember(ip->i_gid, cnp->cn_cred) &&
-           priv_check_cred(cnp->cn_cred, PRIV_ROOT, PRISON_ROOT))
+           priv_check_cred(cnp->cn_cred, PRIV_VFS_SETGID, 0))
                ip->i_mode &= ~ISGID;
 
        if (cnp->cn_flags & CNP_ISWHITEOUT)
index 2391d1b..1bc3a73 100644 (file)
@@ -2217,7 +2217,7 @@ ufs_makeinode(int mode, struct vnode *dvp, struct vnode **vpp,
        if (DOINGSOFTDEP(tvp))
                softdep_change_linkcnt(ip);
        if ((ip->i_mode & ISGID) && !groupmember(ip->i_gid, cnp->cn_cred) &&
-           priv_check_cred(cnp->cn_cred, PRIV_ROOT, 0)) {
+           priv_check_cred(cnp->cn_cred, PRIV_VFS_SETGID, 0)) {
                ip->i_mode &= ~ISGID;
        }