fs/ntfs3: Fix error handling in ntfs_new_inode()

Message ID 20230104123902.978084-1-syoshida@redhat.com
State New
Headers
Series fs/ntfs3: Fix error handling in ntfs_new_inode() |

Commit Message

Shigeru Yoshida Jan. 4, 2023, 12:39 p.m. UTC
  When memory allocation for mi->mrec fails, ntfs_new_inode() calls
iput().  iput() calls ni_write_inode() indirectly, it references
uninitialized mi->mrec, and this causes the kernel crash.  This patch
fixes the issue by making the inode bad before calling iput().

Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
---
 fs/ntfs3/fsntfs.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Konstantin Komarov Jan. 13, 2023, 9:44 a.m. UTC | #1
On 04.01.2023 16:39, Shigeru Yoshida wrote:
> When memory allocation for mi->mrec fails, ntfs_new_inode() calls
> iput().  iput() calls ni_write_inode() indirectly, it references
> uninitialized mi->mrec, and this causes the kernel crash.  This patch
> fixes the issue by making the inode bad before calling iput().
>
> Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
> ---
>   fs/ntfs3/fsntfs.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c
> index 567563771bf8..7b93f2aeb6f6 100644
> --- a/fs/ntfs3/fsntfs.c
> +++ b/fs/ntfs3/fsntfs.c
> @@ -1683,6 +1683,7 @@ struct ntfs_inode *ntfs_new_inode(struct ntfs_sb_info *sbi, CLST rno, bool dir)
>   
>   out:
>   	if (err) {
> +		_ntfs_bad_inode(inode);
>   		iput(inode);
>   		ni = ERR_PTR(err);
>   	}

Hello.

This bug have been already fixed by Ye Bin 
(https://lore.kernel.org/lkml/20221117091912.3436127-1-yebin@huaweicloud.com/).

  * Thanks for your work.
  
Shigeru Yoshida Jan. 16, 2023, 8:33 a.m. UTC | #2
Hi,

On Fri, Jan 13, 2023 at 01:44:48PM +0400, Konstantin Komarov wrote:
> On 04.01.2023 16:39, Shigeru Yoshida wrote:
> > When memory allocation for mi->mrec fails, ntfs_new_inode() calls
> > iput().  iput() calls ni_write_inode() indirectly, it references
> > uninitialized mi->mrec, and this causes the kernel crash.  This patch
> > fixes the issue by making the inode bad before calling iput().
> > 
> > Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
> > ---
> >   fs/ntfs3/fsntfs.c | 1 +
> >   1 file changed, 1 insertion(+)
> > 
> > diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c
> > index 567563771bf8..7b93f2aeb6f6 100644
> > --- a/fs/ntfs3/fsntfs.c
> > +++ b/fs/ntfs3/fsntfs.c
> > @@ -1683,6 +1683,7 @@ struct ntfs_inode *ntfs_new_inode(struct ntfs_sb_info *sbi, CLST rno, bool dir)
> >   out:
> >   	if (err) {
> > +		_ntfs_bad_inode(inode);
> >   		iput(inode);
> >   		ni = ERR_PTR(err);
> >   	}
> 
> Hello.
> 
> This bug have been already fixed by Ye Bin (https://lore.kernel.org/lkml/20221117091912.3436127-1-yebin@huaweicloud.com/).

I've missed the fix you mentioned.
Thank you so much for your reply!

Shigeru

> 
>  * Thanks for your work.
>
  

Patch

diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c
index 567563771bf8..7b93f2aeb6f6 100644
--- a/fs/ntfs3/fsntfs.c
+++ b/fs/ntfs3/fsntfs.c
@@ -1683,6 +1683,7 @@  struct ntfs_inode *ntfs_new_inode(struct ntfs_sb_info *sbi, CLST rno, bool dir)
 
 out:
 	if (err) {
+		_ntfs_bad_inode(inode);
 		iput(inode);
 		ni = ERR_PTR(err);
 	}