Re: [PATCH] jfs: fix array-index-out-of-bounds in diAlloc

From: Dave Kleikamp
Date: Tue Oct 03 2023 - 19:22:58 EST


On 9/26/23 2:13AM, Manas Ghandat wrote:
Currently there is not check against the agno of the iag while
allocating new inodes to avoid fragmentation problem. Added the check
which is required.

Does this fix an observed problem? It seems reasonable and if we add this we may also want to make sure that agno doesn't exceed db_numag,
(JFS_SBI(pip->i_sb)->bmap->db_numag) (yuck).


Signed-off-by: Manas Ghandat <ghandatmanas@xxxxxxxxx>
---
fs/jfs/jfs_imap.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c
index 799d3837e7c2..ace8a1506380 100644
--- a/fs/jfs/jfs_imap.c
+++ b/fs/jfs/jfs_imap.c
@@ -1355,6 +1355,8 @@ int diAlloc(struct inode *pip, bool dir, struct inode *ip)
/* get the ag number of this iag */
agno = BLKTOAG(JFS_IP(pip)->agstart, JFS_SBI(pip->i_sb));
+ if (agno < 0)
+ return -EIO;
if (atomic_read(&JFS_SBI(pip->i_sb)->bmap->db_active[agno])) {
/*