[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250502164337.62895-1-kitotavrik.media@gmail.com>
Date: Fri, 2 May 2025 19:43:36 +0300
From: Andrey Kriulin <kitotavrik.s@...il.com>
To: Christian Brauner <brauner@...nel.org>
Cc: Andrey Kriulin <kitotavrik.media@...il.com>,
"Matthew Wilcox (Oracle)" <willy@...radead.org>,
Josef Bacik <josef@...icpanda.com>,
NeilBrown <neilb@...e.de>,
Jan Kara <jack@...e.cz>,
linux-kernel@...r.kernel.org,
stable@...r.kernel.org
Subject: [PATCH] fs: minix: Fix handling of corrupted directories
If the directory is corrupted and the number of nlinks is less than 2
(valid nlinks have at least 2), then when the directory is deleted, the
minix_rmdir will try to reduce the nlinks(unsigned int) to a negative
value.
Make nlinks validity check for directory in minix_lookup.
Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@...r.kernel.org
Signed-off-by: Andrey Kriulin <kitotavrik.media@...il.com>
---
fs/minix/namei.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/fs/minix/namei.c b/fs/minix/namei.c
index 8938536d8..5717a56fa 100644
--- a/fs/minix/namei.c
+++ b/fs/minix/namei.c
@@ -28,8 +28,13 @@ static struct dentry *minix_lookup(struct inode * dir, struct dentry *dentry, un
return ERR_PTR(-ENAMETOOLONG);
ino = minix_inode_by_name(dentry);
- if (ino)
+ if (ino) {
inode = minix_iget(dir->i_sb, ino);
+ if (S_ISDIR(inode->i_mode) && inode->i_nlink < 2) {
+ iput(inode);
+ return ERR_PTR(-EIO);
+ }
+ }
return d_splice_alias(inode, dentry);
}
--
2.47.2
Powered by blists - more mailing lists