linux/fs/xfs
Carlos Maiolino 42c49d7f24 xfs: fix sgid inheritance for subdirectories inheriting default acls [V3]
XFS removes sgid bits of subdirectories under a directory containing a default
acl.

When a default acl is set, it implies xfs to call xfs_setattr_nonsize() in its
code path. Such function is shared among mkdir and chmod system calls, and
does some checks unneeded by mkdir (calling inode_change_ok()). Such checks
remove sgid bit from the inode after it has been granted.

With this patch, we extend the meaning of XFS_ATTR_NOACL flag to avoid these
checks when acls are being inherited (thanks hch).

Also, xfs_setattr_mode, doesn't need to re-check for group id and capabilities
permissions, this only implies in another try to remove sgid bit from the
directories. Such check is already done either on inode_change_ok() or
xfs_setattr_nonsize().

Changelog:

V2: Extends the meaning of XFS_ATTR_NOACL instead of wrap the tests into another
    function

V3: Remove S_ISDIR check in xfs_setattr_nonsize() from the patch

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
2013-07-10 10:21:51 -05:00
..
Kconfig xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
kmem.c
kmem.h
Makefile xfs: Inode create log items 2013-06-27 13:34:12 -05:00
mrlock.h xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
time.h
uuid.c
uuid.h xfs: add CRC infrastructure 2012-11-19 20:11:24 -06:00
xfs_acl.c xfs: increase number of ACL entries for V5 superblocks 2013-06-05 11:26:53 -05:00
xfs_acl.h xfs: increase number of ACL entries for V5 superblocks 2013-06-05 11:26:53 -05:00
xfs_ag.h xfs: add CRC checks to the AGI 2013-04-21 14:57:43 -05:00
xfs_alloc_btree.c xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_alloc_btree.h xfs: add support for large btree blocks 2013-04-21 14:53:46 -05:00
xfs_alloc.c xfs: Avoid pathological backwards allocation 2013-05-20 13:09:11 -05:00
xfs_alloc.h xfs: convert buffer verifiers to an ops structure. 2012-11-15 21:35:12 -06:00
xfs_aops.c xfs: fix sub-page blocksize data integrity writes 2013-05-20 14:14:25 -05:00
xfs_aops.h
xfs_attr_leaf.c xfs: remove local fork format handling from xfs_bmapi_write() 2013-07-09 16:40:22 -05:00
xfs_attr_leaf.h xfs: fix implicit padding in directory and attr CRC formats 2013-06-13 10:30:03 -05:00
xfs_attr_remote.c xfs: rework remote attr CRCs 2013-05-23 18:04:06 -05:00
xfs_attr_remote.h xfs: rework remote attr CRCs 2013-05-23 18:04:06 -05:00
xfs_attr_sf.h
xfs_attr.c xfs: split remote attribute code out 2013-04-27 12:49:32 -05:00
xfs_attr.h xfs: split remote attribute code out 2013-04-27 12:49:32 -05:00
xfs_bit.c
xfs_bit.h
xfs_bmap_btree.c xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_bmap_btree.h xfs: check on-disk (not incore) btree root size in dfrag.c 2013-06-20 13:26:09 -05:00
xfs_bmap.c xfs: remove local fork format handling from xfs_bmapi_write() 2013-07-09 16:40:22 -05:00
xfs_bmap.h xfs: remove local fork format handling from xfs_bmapi_write() 2013-07-09 16:40:22 -05:00
xfs_btree.c xfs: ensure btree root split sets blkno correctly 2013-06-13 14:18:02 -05:00
xfs_btree.h xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_buf_item.c xfs: Use inode create transaction 2013-06-27 14:27:18 -05:00
xfs_buf_item.h xfs: Introduce an ordered buffer item 2013-06-27 13:33:11 -05:00
xfs_buf.c xfs: rework remote attr CRCs 2013-05-23 18:04:06 -05:00
xfs_buf.h xfs: use b_maps[] for discontiguous buffers 2013-01-16 16:07:11 -06:00
xfs_cksum.h xfs: add CRC infrastructure 2012-11-19 20:11:24 -06:00
xfs_da_btree.c xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC 2013-05-20 16:32:30 -05:00
xfs_da_btree.h xfs: add buffer types to directory and attribute buffers 2013-04-27 13:01:06 -05:00
xfs_dfrag.c xfs: check on-disk (not incore) btree root size in dfrag.c 2013-06-20 13:26:09 -05:00
xfs_dfrag.h
xfs_dinode.h xfs: use XFS_BMAP_BMDR_SPACE vs. XFS_BROOT_SIZE_ADJ 2013-07-09 13:21:15 -05:00
xfs_dir2_block.c xfs: remove local fork format handling from xfs_bmapi_write() 2013-07-09 16:40:22 -05:00
xfs_dir2_data.c xfs: buffer type overruns blf_flags field 2013-04-27 13:01:58 -05:00
xfs_dir2_format.h xfs: fix implicit padding in directory and attr CRC formats 2013-06-13 10:30:03 -05:00
xfs_dir2_leaf.c xfs: plug directory buffer readahead 2013-06-27 13:27:24 -05:00
xfs_dir2_node.c xfs: fix dir3 freespace block corruption 2013-05-30 14:32:47 -05:00
xfs_dir2_priv.h xfs: add buffer types to directory and attribute buffers 2013-04-27 13:01:06 -05:00
xfs_dir2_sf.c xfs: shortform directory offsets change for dir3 format 2013-04-27 12:24:32 -05:00
xfs_dir2.c
xfs_dir2.h
xfs_discard.c
xfs_discard.h
xfs_dquot_item.c
xfs_dquot_item.h
xfs_dquot.c xfs: Code cleanup and removal of some typedef usage 2013-06-28 13:13:59 -05:00
xfs_dquot.h xfs: Replace macro XFS_DQ_TO_QIP with a function 2013-06-28 13:12:42 -05:00
xfs_error.c xfs: increase hexdump output in xfs_corruption_error 2013-04-21 14:48:41 -05:00
xfs_error.h
xfs_export.c fs: encode_fh: return FILEID_INVALID if invalid fid_type 2013-02-26 02:46:10 -05:00
xfs_export.h
xfs_extent_busy.c
xfs_extent_busy.h
xfs_extfree_item.c xfs: Don't reference the EFI after it is freed 2013-05-20 14:29:34 -05:00
xfs_extfree_item.h xfs: don't free EFIs before the EFDs are committed 2013-04-05 13:25:35 -05:00
xfs_file.c aio: don't include aio.h in sched.h 2013-05-07 20:16:25 -07:00
xfs_filestream.c
xfs_filestream.h
xfs_fs.h xfs: add fsgeom flag for v5 superblock support. 2013-05-30 12:57:25 -05:00
xfs_fsops.c xfs: Remove redundant error variable from xfs_growfs_data_private() 2013-06-17 17:43:04 -05:00
xfs_fsops.h
xfs_globals.c xfs: add background scanning to clear eofblocks inodes 2012-11-08 15:34:59 -06:00
xfs_ialloc_btree.c xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_ialloc_btree.h xfs: add support for large btree blocks 2013-04-21 14:53:46 -05:00
xfs_ialloc.c xfs: Use inode create transaction 2013-06-27 14:27:18 -05:00
xfs_ialloc.h xfs: Inode create item recovery 2013-06-27 14:26:21 -05:00
xfs_icache.c xfs: Code cleanup and removal of some typedef usage 2013-06-28 13:13:59 -05:00
xfs_icache.h xfs: Remove dead function prototype xfs_sync_inode_grab() 2013-06-26 12:29:27 -05:00
xfs_icreate_item.c xfs: Inode create log items 2013-06-27 13:34:12 -05:00
xfs_icreate_item.h xfs: Inode create log items 2013-06-27 13:34:12 -05:00
xfs_inode_item.c xfs: add version 3 inode format with CRCs 2013-04-21 15:03:33 -05:00
xfs_inode_item.h xfs remove the XFS_TRANS_DEBUG routines 2012-12-17 16:29:00 -06:00
xfs_inode.c xfs: use XFS_BMAP_BMDR_SPACE vs. XFS_BROOT_SIZE_ADJ 2013-07-09 13:21:15 -05:00
xfs_inode.h xfs: add version 3 inode format with CRCs 2013-04-21 15:03:33 -05:00
xfs_inum.h
xfs_ioctl.c xfs: use get_unused_fd_flags(0) instead of get_unused_fd() 2013-07-09 15:53:57 -05:00
xfs_ioctl.h
xfs_ioctl32.c xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle 2013-05-07 19:00:10 -05:00
xfs_ioctl32.h
xfs_iomap.c xfs: don't use speculative prealloc for small files 2013-06-27 13:27:37 -05:00
xfs_iomap.h
xfs_iops.c xfs: fix sgid inheritance for subdirectories inheriting default acls [V3] 2013-07-10 10:21:51 -05:00
xfs_iops.h
xfs_itable.c xfs: clean up unused codes at xfs_bulkstat() 2013-07-09 15:36:21 -05:00
xfs_itable.h
xfs_linux.h xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_log_cil.c xfs: Introduce ordered log vector support 2013-06-27 13:32:08 -05:00
xfs_log_priv.h xfs: Remove the obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros 2013-04-16 13:18:33 -05:00
xfs_log_recover.c xfs: Inode create item recovery 2013-06-27 14:26:21 -05:00
xfs_log_recover.h
xfs_log.c xfs: Introduce ordered log vector support 2013-06-27 13:32:08 -05:00
xfs_log.h xfs: Inode create log items 2013-06-27 13:34:12 -05:00
xfs_message.c xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_message.h xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00
xfs_mount.c xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD 2013-06-28 17:39:22 -05:00
xfs_mount.h xfs: Remove XFS_MOUNT_RETERR 2013-06-19 14:54:17 -05:00
xfs_mru_cache.c
xfs_mru_cache.h
xfs_qm_bhv.c xfs: Remove boolean_t typedef completely. 2013-01-17 17:32:57 -06:00
xfs_qm_syscalls.c xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD 2013-06-28 17:39:22 -05:00
xfs_qm.c xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD 2013-06-28 17:39:22 -05:00
xfs_qm.h xfs: Change xfs_dquot_acct to be a 2-dimensional array 2013-06-28 14:12:22 -05:00
xfs_quota_priv.h
xfs_quota.h xfs: dquot log reservations are too small 2013-07-09 16:43:16 -05:00
xfs_quotaops.c xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD 2013-06-28 17:39:22 -05:00
xfs_rename.c
xfs_rtalloc.c xfs: uncached buffer reads need to return an error 2012-11-15 21:34:05 -06:00
xfs_rtalloc.h
xfs_sb.h xfs: Define a new function xfs_is_quota_inode() 2013-06-28 13:03:49 -05:00
xfs_stats.c
xfs_stats.h
xfs_super.c xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD 2013-06-28 17:39:22 -05:00
xfs_super.h xfs: xfs_sync_data is redundant. 2012-10-17 12:01:25 -05:00
xfs_symlink.c xfs: Code cleanup and removal of some typedef usage 2013-06-28 13:13:59 -05:00
xfs_symlink.h xfs: fix the symbolic link assert in xfs_ifree 2013-06-19 14:14:43 -05:00
xfs_sysctl.c xfs: Convert use of typedef ctl_table to struct ctl_table 2013-06-17 17:42:25 -05:00
xfs_sysctl.h xfs: add background scanning to clear eofblocks inodes 2012-11-08 15:34:59 -06:00
xfs_trace.c xfs: add CRCs to dir2/da node blocks 2013-04-27 12:33:38 -05:00
xfs_trace.h xfs: Introduce an ordered buffer item 2013-06-27 13:33:11 -05:00
xfs_trans_ail.c xfs remove the XFS_TRANS_DEBUG routines 2012-12-17 16:29:00 -06:00
xfs_trans_buf.c xfs: Introduce an ordered buffer item 2013-06-27 13:33:11 -05:00
xfs_trans_dquot.c xfs: dquot log reservations are too small 2013-07-09 16:43:16 -05:00
xfs_trans_extfree.c
xfs_trans_inode.c xfs: implement inode change count 2013-06-28 13:00:05 -05:00
xfs_trans_priv.h
xfs_trans_space.h
xfs_trans.c xfs: Inode create transaction reservations 2013-06-27 13:36:37 -05:00
xfs_trans.h xfs: Inode create log items 2013-06-27 13:34:12 -05:00
xfs_types.h xfs: Remove boolean_t typedef completely. 2013-01-17 17:32:57 -06:00
xfs_utils.c
xfs_utils.h
xfs_vnode.h
xfs_vnodeops.c xfs: fix the symbolic link assert in xfs_ifree 2013-06-19 14:14:43 -05:00
xfs_vnodeops.h xfs: byte range granularity for XFS_IOC_ZERO_RANGE 2012-11-29 14:21:46 -06:00
xfs_xattr.c
xfs.h xfs: introduce CONFIG_XFS_WARN 2013-05-07 18:45:36 -05:00