]> www.infradead.org Git - users/willy/linux.git/commitdiff
fs/ntfs3: Additional check in ntfs_file_release
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Wed, 4 Sep 2024 09:57:31 +0000 (12:57 +0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Tue, 1 Oct 2024 09:19:08 +0000 (12:19 +0300)
Reported-by: syzbot+8c652f14a0fde76ff11d@syzkaller.appspotmail.com
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/file.c

index 4fdcb5177ea17a48c990c720808f597cd128b740..eb935d4180c0ac9703d6d1ef0777a371b9c3789f 100644 (file)
@@ -1314,7 +1314,14 @@ static int ntfs_file_release(struct inode *inode, struct file *file)
        /* If we are last writer on the inode, drop the block reservation. */
        if (sbi->options->prealloc &&
            ((file->f_mode & FMODE_WRITE) &&
-            atomic_read(&inode->i_writecount) == 1)) {
+            atomic_read(&inode->i_writecount) == 1)
+          /*
+           * The only file when inode->i_fop = &ntfs_file_operations and
+           * init_rwsem(&ni->file.run_lock) is not called explicitly is MFT.
+           *
+           * Add additional check here.
+           */
+           && inode->i_ino != MFT_REC_MFT) {
                ni_lock(ni);
                down_write(&ni->file.run_lock);