Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf3c90ee authored by Amir Goldstein's avatar Amir Goldstein Committed by Steve French
Browse files

cifs: copy_file_range needs to strip setuid bits and update timestamps



cifs has both source and destination inodes locked throughout the copy.
Like ->write_iter(), we update mtime and strip setuid bits of destination
file before copy and like ->read_iter(), we update atime of source file
after copy.

Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 7e5a70ad
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -1104,6 +1104,10 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
		goto out;
		goto out;
	}
	}


	rc = -EOPNOTSUPP;
	if (!target_tcon->ses->server->ops->copychunk_range)
		goto out;

	/*
	/*
	 * Note: cifs case is easier than btrfs since server responsible for
	 * Note: cifs case is easier than btrfs since server responsible for
	 * checks for proper open modes and file type and if it wants
	 * checks for proper open modes and file type and if it wants
@@ -1115,11 +1119,12 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
	/* should we flush first and last page first */
	/* should we flush first and last page first */
	truncate_inode_pages(&target_inode->i_data, 0);
	truncate_inode_pages(&target_inode->i_data, 0);


	if (target_tcon->ses->server->ops->copychunk_range)
	rc = file_modified(dst_file);
	if (!rc)
		rc = target_tcon->ses->server->ops->copychunk_range(xid,
		rc = target_tcon->ses->server->ops->copychunk_range(xid,
			smb_file_src, smb_file_target, off, len, destoff);
			smb_file_src, smb_file_target, off, len, destoff);
	else

		rc = -EOPNOTSUPP;
	file_accessed(src_file);


	/* force revalidate of size and timestamps of target file now
	/* force revalidate of size and timestamps of target file now
	 * that target is updated on the server
	 * that target is updated on the server