VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   33 Branches   57 Tags
author: Vivek Goyal <vgoyal@redhat.com> 2020-10-09 14:15:10 -0400 committer: Miklos Szeredi <mszeredi@redhat.com> 2020-11-11 17:22:33 +0100 commit: 8981bdfda7445af5d5a8c277c923bf91873a0c98 parent: 3179216135ec09825d7c7875580951a6e69dc5df
Commit Summary:
fuse: don't send ATTR_MODE to kill suid/sgid for handle_killpriv_v2
Diffstat:
1 file changed, 8 insertions, 1 deletion
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 24b201c4d9a9..aa0a44f7028f 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1262,17 +1262,24 @@ static ssize_t fuse_cache_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	ssize_t written_buffered = 0;
 	struct inode *inode = mapping->host;
 	ssize_t err;
+	struct fuse_conn *fc = get_fuse_conn(inode);
 	loff_t endbyte = 0;
 
-	if (get_fuse_conn(inode)->writeback_cache) {
+	if (fc->writeback_cache) {
 		/* Update size (EOF optimization) and mode (SUID clearing) */
 		err = fuse_update_attributes(mapping->host, file);
 		if (err)
 			return err;
 
+		if (fc->handle_killpriv_v2 &&
+		    should_remove_suid(file_dentry(file))) {
+			goto writethrough;
+		}
+
 		return generic_file_write_iter(iocb, from);
 	}
 
+writethrough:
 	inode_lock(inode);
 
 	/* We can write back this queue in page reclaim */