]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs/ntfs3: call _ntfs_bad_inode() when failing to rename
authorHelen Koike <koike@igalia.com>
Wed, 6 May 2026 17:08:22 +0000 (14:08 -0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Tue, 2 Jun 2026 15:02:29 +0000 (17:02 +0200)
It is safe to call _ntfs_bad_inode on live inodes since:
  commit 519b078998ce ("fs/ntfs3: Exclude call make_bad_inode for live nodes.")

The WARN_ON was added when it wasn't safe by:
  commit d99208b91933 ("fs/ntfs3: cancle set bad inode after removing name fails")

Replace the WARN_ON with a call to _ntfs_bad_inode() to prevent further
operations on the inconsistent inode.

Reported-by: syzbot+4d8e30dbafb5c1260479@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=4d8e30dbafb5c1260479
Fixes: 519b078998ce ("fs/ntfs3: Exclude call make_bad_inode for live nodes.")
Signed-off-by: Helen Koike <koike@igalia.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/frecord.c

index 7b035da63c1219ef5f3b51f2fd2e2f9911b785c9..78eb065c7e431b44713f77fc8d74a05ae750b36f 100644 (file)
@@ -2800,8 +2800,8 @@ int ni_rename(struct ntfs_inode *dir_ni, struct ntfs_inode *new_dir_ni,
        err = ni_add_name(new_dir_ni, ni, new_de);
        if (!err) {
                err = ni_remove_name(dir_ni, ni, de, &de2, &undo);
-               WARN_ON(err &&
-                       ni_remove_name(new_dir_ni, ni, new_de, &de2, &undo));
+               if (err && ni_remove_name(new_dir_ni, ni, new_de, &de2, &undo))
+                       _ntfs_bad_inode(&ni->vfs_inode);
        }
 
        /*