priv: Introduce and use PRIV_VFS_REVOKE
authorMichael Neumann <mneumann@ntecs.de>
Sun, 12 Jul 2009 16:07:12 +0000 (18:07 +0200)
committerMichael Neumann <mneumann@ntecs.de>
Sun, 12 Jul 2009 16:07:12 +0000 (18:07 +0200)
sys/kern/kern_jail.c
sys/kern/vfs_syscalls.c
sys/sys/priv.h

index bde34e7..c80a8eb 100644 (file)
@@ -686,6 +686,7 @@ prison_priv_check(struct ucred *cred, int priv)
        case PRIV_VFS_CHROOT:
        case PRIV_VFS_LINK:
        case PRIV_VFS_CHFLAGS_DEV:
+       case PRIV_VFS_REVOKE:
        case PRIV_VFS_MKNOD_BAD:
        case PRIV_VFS_MKNOD_WHT:
        case PRIV_VFS_MKNOD_DIR:
index ede5d73..27b766c 100644 (file)
@@ -3596,7 +3596,7 @@ sys_revoke(struct revoke_args *uap)
                if (error == 0)
                        error = VOP_GETATTR(vp, &vattr);
                if (error == 0 && cred->cr_uid != vattr.va_uid)
-                       error = priv_check_cred(cred, PRIV_ROOT, PRISON_ROOT);
+                       error = priv_check_cred(cred, PRIV_VFS_REVOKE, 0);
                if (error == 0 && (vp->v_type == VCHR || vp->v_type == VBLK)) {
                        if (count_udev(vp->v_umajor, vp->v_uminor) > 0)
                                error = vrevoke(vp, cred);
index 9847ad5..6241ac4 100644 (file)
 #define        PRIV_VFS_MKNOD_DIR      345     /* Can mknod() to create special */
                                        /* directories for HAMMER. */
 #define        PRIV_VFS_CHMOD          346     /* Can chmod() if not owner */
+#define        PRIV_VFS_REVOKE         347     /* Can revoke() if not owner */
 
 /*
  * Virtual memory privileges.