Skip to content

Commit

Permalink
xfs: fallocate() should call file_modified()
Browse files Browse the repository at this point in the history
In XFS, we always update the inode change and modification time when
any fallocate() operation succeeds.  Furthermore, as various
fallocate modes can change the file contents (extending EOF,
punching holes, zeroing things, shifting extents), we should drop
file privileges like suid just like we do for a regular write().
There's already a VFS helper that figures all this out for us, so
use that.

The net effect of this is that we no longer drop suid/sgid if the
caller is root, but we also now drop file capabilities.

We also move the xfs_update_prealloc_flags() function so that it now
is only called by the scope that needs to set the the prealloc flag.

Based on a patch from Darrick Wong.

Signed-off-by: Dave Chinner <[email protected]>
Reviewed-by: Darrick J. Wong <[email protected]>
Signed-off-by: Darrick J. Wong <[email protected]>
  • Loading branch information
Dave Chinner authored and Darrick J. Wong committed Feb 1, 2022
1 parent 472c6e4 commit fbe7e52
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions fs/xfs/xfs_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,10 @@ xfs_file_fallocate(
goto out_unlock;
}

error = file_modified(file);
if (error)
goto out_unlock;

if (mode & FALLOC_FL_PUNCH_HOLE) {
error = xfs_free_file_space(ip, offset, len);
if (error)
Expand Down Expand Up @@ -1053,11 +1057,12 @@ xfs_file_fallocate(
if (error)
goto out_unlock;
}
}

error = xfs_update_prealloc_flags(ip, flags);
if (error)
goto out_unlock;
error = xfs_update_prealloc_flags(ip, XFS_PREALLOC_SET);
if (error)
goto out_unlock;

}

/* Change file size if needed */
if (new_size) {
Expand Down

0 comments on commit fbe7e52

Please sign in to comment.