From: Konstantin Komarov Date: Wed, 4 Sep 2024 09:57:31 +0000 (+0300) Subject: fs/ntfs3: Additional check in ntfs_file_release X-Git-Tag: v5.15.178~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=542532afe249588ae88d8409d4bf861c315f8862;p=thirdparty%2Fkernel%2Fstable.git fs/ntfs3: Additional check in ntfs_file_release commit 031d6f608290c847ba6378322d0986d08d1a645a upstream. Reported-by: syzbot+8c652f14a0fde76ff11d@syzkaller.appspotmail.com Signed-off-by: Konstantin Komarov Signed-off-by: Bin Lan Signed-off-by: Sasha Levin Signed-off-by: Suraj Jitindar Singh Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c index af7e138064624..2d5d234a4533d 100644 --- a/fs/ntfs3/file.c +++ b/fs/ntfs3/file.c @@ -1192,8 +1192,16 @@ static int ntfs_file_release(struct inode *inode, struct file *file) int err = 0; /* 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)) { + if (sbi->options->prealloc && + ((file->f_mode & FMODE_WRITE) && + 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);