|
Takashi Iwai |
df5c95 |
From 21a87d88c2253350e115029f14fe2a10a7e6c856 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
df5c95 |
From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
|
|
Takashi Iwai |
df5c95 |
Date: Sun, 2 Oct 2022 12:08:04 +0900
|
|
Takashi Iwai |
df5c95 |
Subject: [PATCH] nilfs2: fix NULL pointer dereference at nilfs_bmap_lookup_at_level()
|
|
Takashi Iwai |
df5c95 |
Git-commit: 21a87d88c2253350e115029f14fe2a10a7e6c856
|
|
Takashi Iwai |
df5c95 |
Patch-mainline: v6.1-rc1
|
|
Takashi Iwai |
df5c95 |
References: CVE-2022-3621 bsc#1204574
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
If the i_mode field in inode of metadata files is corrupted on disk, it
|
|
Takashi Iwai |
df5c95 |
can cause the initialization of bmap structure, which should have been
|
|
Takashi Iwai |
df5c95 |
called from nilfs_read_inode_common(), not to be called. This causes a
|
|
Takashi Iwai |
df5c95 |
lockdep warning followed by a NULL pointer dereference at
|
|
Takashi Iwai |
df5c95 |
nilfs_bmap_lookup_at_level().
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
This patch fixes these issues by adding a missing sanitiy check for the
|
|
Takashi Iwai |
df5c95 |
i_mode field of metadata file's inode.
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
Link: https://lkml.kernel.org/r/20221002030804.29978-1-konishi.ryusuke@gmail.com
|
|
Takashi Iwai |
df5c95 |
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
|
|
Takashi Iwai |
df5c95 |
Reported-by: syzbot+2b32eb36c1a825b7a74c@syzkaller.appspotmail.com
|
|
Takashi Iwai |
df5c95 |
Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
|
Takashi Iwai |
df5c95 |
Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
|
|
Takashi Iwai |
df5c95 |
Cc: <stable@vger.kernel.org>
|
|
Takashi Iwai |
df5c95 |
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
Takashi Iwai |
df5c95 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
---
|
|
Takashi Iwai |
df5c95 |
fs/nilfs2/inode.c | 2 ++
|
|
Takashi Iwai |
df5c95 |
1 file changed, 2 insertions(+)
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
|
|
Takashi Iwai |
df5c95 |
index b074144f6f83..232dd7b6cca1 100644
|
|
Takashi Iwai |
df5c95 |
--- a/fs/nilfs2/inode.c
|
|
Takashi Iwai |
df5c95 |
+++ b/fs/nilfs2/inode.c
|
|
Takashi Iwai |
df5c95 |
@@ -455,6 +455,8 @@ int nilfs_read_inode_common(struct inode *inode,
|
|
Takashi Iwai |
df5c95 |
inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
|
|
Takashi Iwai |
df5c95 |
inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec);
|
|
Takashi Iwai |
df5c95 |
inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
|
|
Takashi Iwai |
df5c95 |
+ if (nilfs_is_metadata_file_inode(inode) && !S_ISREG(inode->i_mode))
|
|
Takashi Iwai |
df5c95 |
+ return -EIO; /* this inode is for metadata and corrupted */
|
|
Takashi Iwai |
df5c95 |
if (inode->i_nlink == 0)
|
|
Takashi Iwai |
df5c95 |
return -ESTALE; /* this inode is deleted */
|
|
Takashi Iwai |
df5c95 |
|
|
Takashi Iwai |
df5c95 |
--
|
|
Takashi Iwai |
df5c95 |
2.35.3
|
|
Takashi Iwai |
df5c95 |
|