xfs: ioctl check for capabilities in the current user namespace
Subsystems (2)
PATCH v7 3/7 xfs: ioctl check for capabilities in the current user namespace
Use inode_capable() to check if SUID|SGID bits should be cleared to match similar check in inode_change_ok().
The check for CAP_LINUX_IMMUTABLE was not modified since all other file systems also check against init_user_ns rather than current_user_ns.
--- fs/xfs/xfs_ioctl.c | 4 ++-- kernel/capability.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-)
fs/xfs/xfs_ioctl.c +2 -2
@@ -981,7 +981,7 @@ xfs_ioctl_setattr(* to the file owner ID, except in cases where the * CAP_FSETID capability is applicable. */ -if (current_fsuid () != ip->i_d.di_uid && !capable (CAP_FOWNER )) { +if (!inode_owner_or_capable (VFS_I (ip))) { code =XFS_ERROR (EPERM ); goto error_return; }
@@ -1103,7 +1103,7 @@ xfs_ioctl_setattr(* cleared upon successful return from chown() */ if ((ip->i_d.di_mode & (S_ISUID |S_ISGID )) && - !capable (CAP_FSETID )) + !inode_capable (VFS_I (ip),CAP_FSETID )) ip->i_d.di_mode &= ~(S_ISUID |S_ISGID );/*
kernel/capability.c +1 -0
@@ -464,3 +464,4 @@ bool inode_capable(const struct inode *inode, int cap)return ns_capable (ns, cap) &&kuid_has_mapping (ns, inode->i_uid); } +EXPORT_SYMBOL (inode_capable);
Signature · 6 lines
1.8.1.4 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs
Quoted 18 lines · Dwight Engen
Use
inode_capable()to check if SUID|SGID bits should be cleared to match similar check ininode_change_ok().The check for
CAP_LINUX_IMMUTABLEwas not modified since all other file systems also check againstinit_user_nsrather thancurrent_user_ns.Reviewed-by Dave Chinner <[email protected]>Signed-off-by Dwight Engen <[email protected]>--- fs/xfs/xfs_ioctl.c | 4 ++-- kernel/capability.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-)fs/xfs/xfs_ioctl.c +0
-0
fs/xfs/xfs_ioctl.c xfs_ioctl_setattr( · line 984
Quoted 5 lines
fs/xfs/xfs_ioctl.c +1
-1@@ -981,7 +981,7 @@ xfs_ioctl_setattr(* to the file owner ID, except in cases where the * CAP_FSETID capability is applicable. */ -if (current_fsuid () != ip->i_d.di_uid && !capable (CAP_FOWNER )) { +if (!inode_owner_or_capable (VFS_I (ip))) {
Though the user in container can get his quota limit info which is configured on host, but he has no rights to modify it, so this patch looks good to me.
Thanks
Quoted 18 lines
fs/xfs/xfs_ioctl.c +1
-1code =XFS_ERROR (EPERM ); goto error_return; }@@ -1103,7 +1103,7 @@ xfs_ioctl_setattr(* cleared upon successful return from chown() */ if ((ip->i_d.di_mode & (S_ISUID |S_ISGID )) && - !capable (CAP_FSETID )) + !inode_capable (VFS_I (ip),CAP_FSETID )) ip->i_d.di_mode &= ~(S_ISUID |S_ISGID );/* kernel/capability.c +0
-0
kernel/capability.c bool inode_capable(const struct inode *inode, int cap) · line 467
Quoted 4 lines
kernel/capability.c +1
-0@@ -464,3 +464,4 @@ bool inode_capable(const struct inode *inode, int cap)return ns_capable (ns, cap) &&kuid_has_mapping (ns, inode->i_uid); } +EXPORT_SYMBOL (inode_capable);
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs