remove xfs xattr permission checks
Subsystems (2)
PATCH 8/8 remove xfs xattr permission checks
remove checks now in the VFS
XFS has an additional xattr interface through obscure ioctl. it requires raised capabilities but we need to add some read-only/immutable checks anyway
Signed-off-by Christoph Hellwig <[email protected]>
fs/xfs/xfs_attr.c +1 -24
@@ -133,11 +133,6 @@ ip->i_d.di_anextents == 0))return (ENOATTR ); -if (!(flags & (ATTR_KERNACCESS |ATTR_SECURE ))) { -if ((error =xfs_iaccess (ip,S_IRUSR , cred))) -return (XFS_ERROR (error)); - } -/* * Fill in the arg structure for this request. */
@@ -227,14 +222,6 @@if (XFS_FORCED_SHUTDOWN (mp))return (EIO ); -xfs_ilock (dp,XFS_ILOCK_SHARED ); -if (!(flags &ATTR_SECURE ) && - (error =xfs_iaccess (dp,S_IWUSR , cred))) { -xfs_iunlock (dp,XFS_ILOCK_SHARED ); -return (XFS_ERROR (error)); - } -xfs_iunlock (dp,XFS_ILOCK_SHARED ); -/* * Attach the dquots to the inode. */
@@ -485,11 +472,7 @@return (EIO );xfs_ilock (dp,XFS_ILOCK_SHARED ); -if (!(flags &ATTR_SECURE ) && - (error =xfs_iaccess (dp,S_IWUSR , cred))) { -xfs_iunlock (dp,XFS_ILOCK_SHARED ); -return (XFS_ERROR (error)); - }else if (XFS_IFORK_Q (dp) ==0 || +if (XFS_IFORK_Q (dp) ==0 || (dp->i_d.di_aformat ==XFS_DINODE_FMT_EXTENTS && dp->i_d.di_anextents ==0 )) {xfs_iunlock (dp,XFS_ILOCK_SHARED );
@@ -673,12 +656,6 @@return (EIO );xfs_ilock (dp,XFS_ILOCK_SHARED ); -if (!(flags &ATTR_SECURE ) && - (error =xfs_iaccess (dp,S_IRUSR , cred))) { -xfs_iunlock (dp,XFS_ILOCK_SHARED ); -return (XFS_ERROR (error)); - } -/* * Decide on what work routines to call based on the inode size. */
fs/xfs/linux-2.6/xfs_ioctl.c +5 -0
@@ -545,6 +545,8 @@char *kbuf;int error =EFAULT ; +if (IS_RDONLY (&vp->v_inode)) +return -EROFS ;if (IS_IMMUTABLE (&vp->v_inode) ||IS_APPEND (&vp->v_inode))return EPERM ;if (len >XATTR_SIZE_MAX )
@@ -572,6 +574,9 @@ {int error; + +if (IS_RDONLY (&vp->v_inode)) +return -EROFS ;if (IS_IMMUTABLE (&vp->v_inode) ||IS_APPEND (&vp->v_inode))return EPERM ;