Patch "f2fs: fix to avoid dirent corruption" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    f2fs: fix to avoid dirent corruption

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     f2fs-fix-to-avoid-dirent-corruption.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit bb50974534f26a5eadf44e1bf88ca969aa3d2799
Author: Chao Yu <chao@xxxxxxxxxx>
Date:   Tue Nov 28 17:25:16 2023 +0800

    f2fs: fix to avoid dirent corruption
    
    [ Upstream commit 53edb549565f55ccd0bdf43be3d66ce4c2d48b28 ]
    
    As Al reported in link[1]:
    
    f2fs_rename()
    ...
            if (old_dir != new_dir && !whiteout)
                    f2fs_set_link(old_inode, old_dir_entry,
                                            old_dir_page, new_dir);
            else
                    f2fs_put_page(old_dir_page, 0);
    
    You want correct inumber in the ".." link.  And cross-directory
    rename does move the source to new parent, even if you'd been asked
    to leave a whiteout in the old place.
    
    [1] https://lore.kernel.org/all/20231017055040.GN800259@ZenIV/
    
    With below testcase, it may cause dirent corruption, due to it missed
    to call f2fs_set_link() to update ".." link to new directory.
    - mkdir -p dir/foo
    - renameat2 -w dir/foo bar
    
    [ASSERT] (__chk_dots_dentries:1421)  --> Bad inode number[0x4] for '..', parent parent ino is [0x3]
    [FSCK] other corrupted bugs                           [Fail]
    
    Fixes: 7e01e7ad746b ("f2fs: support RENAME_WHITEOUT")
    Cc: Jan Kara <jack@xxxxxxx>
    Reported-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
    Reviewed-by: Jan Kara <jack@xxxxxxx>
    Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 7a86a8dcf4f1..0d6906644feb 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -1088,7 +1088,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 	}
 
 	if (old_dir_entry) {
-		if (old_dir != new_dir && !whiteout)
+		if (old_dir != new_dir)
 			f2fs_set_link(old_inode, old_dir_entry,
 						old_dir_page, new_dir);
 		else




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux