From 09fc72ef061e28685e66bcb6d2017c0520ea2aa7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 24 Jan 2022 15:37:35 +0100 Subject: [PATCH] fix up fuse 4.9 patches --- queue-4.9/fuse-fix-bad-inode.patch | 57 ++++++++++++++++--- .../fuse-fix-live-lock-in-fuse_iget.patch | 2 +- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/queue-4.9/fuse-fix-bad-inode.patch b/queue-4.9/fuse-fix-bad-inode.patch index 12deb1a2457..008a81e3faa 100644 --- a/queue-4.9/fuse-fix-bad-inode.patch +++ b/queue-4.9/fuse-fix-bad-inode.patch @@ -29,17 +29,21 @@ Reported-by: syzbot+f427adf9324b92652ccc@syzkaller.appspotmail.com Signed-off-by: Miklos Szeredi Tested-by: Jan Kara Cc: -[adjusted for missing fs/fuse/readdir.c and changes in fuse_evict_inode() in 4.14] -Signed-off-by: Samuel Mendoza-Jonas +[bwh: Backported to 4.9: + - Drop changes in fuse_dir_fsync(), fuse_readahead(), fuse_evict_inode() + - In fuse_get_link(), return ERR_PTR(-EIO) for bad inodes + - Convert some additional calls to is_bad_inode() + - Adjust filename, context] +Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- fs/fuse/acl.c | 6 ++++++ - fs/fuse/dir.c | 37 ++++++++++++++++++++++++++++++++----- - fs/fuse/file.c | 21 +++++++++++++++------ + fs/fuse/dir.c | 40 +++++++++++++++++++++++++++++++++++----- + fs/fuse/file.c | 27 ++++++++++++++++++--------- fs/fuse/fuse_i.h | 12 ++++++++++++ fs/fuse/inode.c | 2 +- fs/fuse/xattr.c | 9 +++++++++ - 6 files changed, 75 insertions(+), 12 deletions(-) + 6 files changed, 81 insertions(+), 15 deletions(-) --- a/fs/fuse/acl.c +++ b/fs/fuse/acl.c @@ -171,7 +175,17 @@ Signed-off-by: Greg Kroah-Hartman return -EIO; req = fuse_get_req(fc, 1); -@@ -1707,7 +1728,7 @@ int fuse_do_setattr(struct dentry *dentr +@@ -1409,6 +1430,9 @@ static const char *fuse_get_link(struct + if (!dentry) + return ERR_PTR(-ECHILD); + ++ if (fuse_is_bad(inode)) ++ return ERR_PTR(-EIO); ++ + link = kmalloc(PAGE_SIZE, GFP_KERNEL); + if (!link) + return ERR_PTR(-ENOMEM); +@@ -1707,7 +1731,7 @@ int fuse_do_setattr(struct dentry *dentr if (fuse_invalid_attr(&outarg.attr) || (inode->i_mode ^ outarg.attr.mode) & S_IFMT) { @@ -180,7 +194,7 @@ Signed-off-by: Greg Kroah-Hartman err = -EIO; goto error; } -@@ -1763,6 +1784,9 @@ static int fuse_setattr(struct dentry *e +@@ -1763,6 +1787,9 @@ static int fuse_setattr(struct dentry *e struct file *file = (attr->ia_valid & ATTR_FILE) ? attr->ia_file : NULL; int ret; @@ -190,7 +204,7 @@ Signed-off-by: Greg Kroah-Hartman if (!fuse_allow_current_process(get_fuse_conn(inode))) return -EACCES; -@@ -1821,6 +1845,9 @@ static int fuse_getattr(struct vfsmount +@@ -1821,6 +1848,9 @@ static int fuse_getattr(struct vfsmount struct inode *inode = d_inode(entry); struct fuse_conn *fc = get_fuse_conn(inode); @@ -258,6 +272,15 @@ Signed-off-by: Greg Kroah-Hartman /* * In auto invalidate mode, always update attributes on read. * Otherwise, only update if we attempt to read past EOF (to ensure +@@ -1123,7 +1129,7 @@ static ssize_t fuse_perform_write(struct + int err = 0; + ssize_t res = 0; + +- if (is_bad_inode(inode)) ++ if (fuse_is_bad(inode)) + return -EIO; + + if (inode->i_size < pos + iov_iter_count(ii)) @@ -1180,6 +1186,9 @@ static ssize_t fuse_file_write_iter(stru ssize_t err; loff_t endbyte = 0; @@ -268,6 +291,24 @@ Signed-off-by: Greg Kroah-Hartman if (get_fuse_conn(inode)->writeback_cache) { /* Update size (EOF optimization) and mode (SUID clearing) */ err = fuse_update_attributes(mapping->host, NULL, file, NULL); +@@ -1415,7 +1424,7 @@ static ssize_t __fuse_direct_read(struct + struct file *file = io->file; + struct inode *inode = file_inode(file); + +- if (is_bad_inode(inode)) ++ if (fuse_is_bad(inode)) + return -EIO; + + res = fuse_direct_io(io, iter, ppos, 0); +@@ -1438,7 +1447,7 @@ static ssize_t fuse_direct_write_iter(st + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file); + ssize_t res; + +- if (is_bad_inode(inode)) ++ if (fuse_is_bad(inode)) + return -EIO; + + /* Don't allow parallel writes to the same file */ @@ -1911,7 +1920,7 @@ static int fuse_writepages(struct addres int err; diff --git a/queue-4.9/fuse-fix-live-lock-in-fuse_iget.patch b/queue-4.9/fuse-fix-live-lock-in-fuse_iget.patch index bfffc832714..a90ff341169 100644 --- a/queue-4.9/fuse-fix-live-lock-in-fuse_iget.patch +++ b/queue-4.9/fuse-fix-live-lock-in-fuse_iget.patch @@ -35,7 +35,7 @@ Fixes: 5d069dbe8aaf ("fuse: fix bad inode") Cc: stable@vger.kernel.org # 5.10+ Signed-off-by: Amir Goldstein Signed-off-by: Miklos Szeredi -Signed-off-by: Samuel Mendoza-Jonas +Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- fs/fuse/fuse_i.h | 1 + -- 2.47.2