jfs: Fix array-index-out-of-bounds in diFree

Reported-by: syzbot+241c815bda521982cb49@syzkaller.appspotmail.com
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Jeongjun Park <aha310510@gmail.com>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>

authored by Jeongjun Park and committed by Dave Kleikamp f73f969b ce6dede9

+4 -1
+4 -1
fs/jfs/jfs_imap.c
··· 290 290 int diRead(struct inode *ip) 291 291 { 292 292 struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb); 293 - int iagno, ino, extno, rc; 293 + int iagno, ino, extno, rc, agno; 294 294 struct inode *ipimap; 295 295 struct dinode *dp; 296 296 struct iag *iagp; ··· 339 339 340 340 /* get the ag for the iag */ 341 341 agstart = le64_to_cpu(iagp->agstart); 342 + agno = BLKTOAG(agstart, JFS_SBI(ip->i_sb)); 342 343 343 344 release_metapage(mp); 345 + if (agno >= MAXAG || agno < 0) 346 + return -EIO; 344 347 345 348 rel_inode = (ino & (INOSPERPAGE - 1)); 346 349 pageno = blkno >> sbi->l2nbperpage;