Skip to content

Commit 7debbf0

Browse files
djwongdchinner
authored andcommitted
xfs: update ctime and remove suid before cloning files
Before cloning into a file, update the ctime and remove sensitive attributes like suid, just like we'd do for a regular file write. Signed-off-by: Darrick J. Wong <[email protected]> Reviewed-by: Dave Chinner <[email protected]> Signed-off-by: Dave Chinner <[email protected]>
1 parent 410fdc7 commit 7debbf0

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

fs/xfs/xfs_reflink.c

+25
Original file line numberDiff line numberDiff line change
@@ -1264,6 +1264,7 @@ xfs_reflink_zero_posteof(
12641264
* Prepare two files for range cloning. Upon a successful return both inodes
12651265
* will have the iolock and mmaplock held, the page cache of the out file
12661266
* will be truncated, and any leases on the out file will have been broken.
1267+
* This function borrows heavily from xfs_file_aio_write_checks.
12671268
*/
12681269
STATIC int
12691270
xfs_reflink_remap_prep(
@@ -1327,6 +1328,30 @@ xfs_reflink_remap_prep(
13271328
/* Zap any page cache for the destination file's range. */
13281329
truncate_inode_pages_range(&inode_out->i_data, pos_out,
13291330
PAGE_ALIGN(pos_out + *len) - 1);
1331+
1332+
/* If we're altering the file contents... */
1333+
if (!is_dedupe) {
1334+
/*
1335+
* ...update the timestamps (which will grab the ilock again
1336+
* from xfs_fs_dirty_inode, so we have to call it before we
1337+
* take the ilock).
1338+
*/
1339+
if (!(file_out->f_mode & FMODE_NOCMTIME)) {
1340+
ret = file_update_time(file_out);
1341+
if (ret)
1342+
goto out_unlock;
1343+
}
1344+
1345+
/*
1346+
* ...clear the security bits if the process is not being run
1347+
* by root. This keeps people from modifying setuid and setgid
1348+
* binaries.
1349+
*/
1350+
ret = file_remove_privs(file_out);
1351+
if (ret)
1352+
goto out_unlock;
1353+
}
1354+
13301355
return 1;
13311356
out_unlock:
13321357
xfs_reflink_remap_unlock(file_in, file_out);

0 commit comments

Comments
 (0)