]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Jul 2022 08:17:21 +0000 (10:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Jul 2022 08:17:21 +0000 (10:17 +0200)
added patches:
exfat-use-updated-exfat_chain-directly-during-renaming.patch

queue-5.18/exfat-use-updated-exfat_chain-directly-during-renaming.patch [new file with mode: 0644]
queue-5.18/series

diff --git a/queue-5.18/exfat-use-updated-exfat_chain-directly-during-renaming.patch b/queue-5.18/exfat-use-updated-exfat_chain-directly-during-renaming.patch
new file mode 100644 (file)
index 0000000..feb775e
--- /dev/null
@@ -0,0 +1,51 @@
+From 204e6ceaa1035cb7b92b156517e88842ebb4c7ff Mon Sep 17 00:00:00 2001
+From: Sungjong Seo <sj1557.seo@samsung.com>
+Date: Wed, 8 Jun 2022 00:05:21 +0900
+Subject: exfat: use updated exfat_chain directly during renaming
+
+From: Sungjong Seo <sj1557.seo@samsung.com>
+
+commit 204e6ceaa1035cb7b92b156517e88842ebb4c7ff upstream.
+
+In order for a file to access its own directory entry set,
+exfat_inode_info(ei) has two copied values. One is ei->dir, which is
+a snapshot of exfat_chain of the parent directory, and the other is
+ei->entry, which is the offset of the start of the directory entry set
+in the parent directory.
+
+Since the parent directory can be updated after the snapshot point,
+it should be used only for accessing one's own directory entry set.
+
+However, as of now, during renaming, it could try to traverse or to
+allocate clusters via snapshot values, it does not make sense.
+
+This potential problem has been revealed when exfat_update_parent_info()
+was removed by commit d8dad2588add ("exfat: fix referencing wrong parent
+directory information after renaming"). However, I don't think it's good
+idea to bring exfat_update_parent_info() back.
+
+Instead, let's use the updated exfat_chain of parent directory diectly.
+
+Fixes: d8dad2588add ("exfat: fix referencing wrong parent directory information after renaming")
+Reported-by: Wang Yugui <wangyugui@e16-tech.com>
+Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
+Tested-by: Wang Yugui <wangyugui@e16-tech.com>
+Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/exfat/namei.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/fs/exfat/namei.c
++++ b/fs/exfat/namei.c
+@@ -1198,7 +1198,9 @@ static int __exfat_rename(struct inode *
+               return -ENOENT;
+       }
+-      exfat_chain_dup(&olddir, &ei->dir);
++      exfat_chain_set(&olddir, EXFAT_I(old_parent_inode)->start_clu,
++              EXFAT_B_TO_CLU_ROUND_UP(i_size_read(old_parent_inode), sbi),
++              EXFAT_I(old_parent_inode)->flags);
+       dentry = ei->entry;
+       ep = exfat_get_dentry(sb, &olddir, dentry, &old_bh);
index 6c676f463e2dd85eb5db4a54374921ed5b3b079b..1572499488c19348f198c2a5ae156ddda1ffcf93 100644 (file)
@@ -148,3 +148,4 @@ crypto-qat-add-param-check-for-rsa.patch
 crypto-qat-add-param-check-for-dh.patch
 crypto-qat-re-enable-registration-of-algorithms.patch
 exfat-fix-referencing-wrong-parent-directory-informa.patch
+exfat-use-updated-exfat_chain-directly-during-renaming.patch