diff options
author | Darrick J. Wong <[email protected]> | 2020-05-12 16:42:51 -0700 |
---|---|---|
committer | Darrick J. Wong <[email protected]> | 2020-05-19 09:40:56 -0700 |
commit | 765d3c393c222c3bb281885ea211c8ebc08250b4 (patch) | |
tree | 44bebfad379400a07d796ab5acaed2e9bedd9aa4 | |
parent | 78bba5c812cc651cee51b64b786be926ab7fe2a9 (diff) |
xfs: don't allow SWAPEXT if we'd screw up quota accounting
Since the old SWAPEXT ioctl doesn't know how to adjust quota ids,
bail out of the ids don't match and quotas are enabled.
Signed-off-by: Darrick J. Wong <[email protected]>
Reviewed-by: Eric Sandeen <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
-rw-r--r-- | fs/xfs/xfs_bmap_util.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index cc23a3e23e2d..b8acfd4d3ca6 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1211,6 +1211,13 @@ xfs_swap_extents_check_format( struct xfs_inode *tip) /* tmp inode */ { + /* User/group/project quota ids must match if quotas are enforced. */ + if (XFS_IS_QUOTA_ON(ip->i_mount) && + (!uid_eq(VFS_I(ip)->i_uid, VFS_I(tip)->i_uid) || + !gid_eq(VFS_I(ip)->i_gid, VFS_I(tip)->i_gid) || + ip->i_d.di_projid != tip->i_d.di_projid)) + return -EINVAL; + /* Should never get a local format */ if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || tip->i_d.di_format == XFS_DINODE_FMT_LOCAL) |