diff --git a/fs/jfs/jfs_extent.c b/fs/jfs/jfs_extent.c --- a/fs/jfs/jfs_extent.c +++ b/fs/jfs/jfs_extent.c @@ -326,6 +326,12 @@ extBalloc(struct inode *ip, s64 hint, s64 * nblocks, s64 * blkno) if (bmp->db_maxfreebud == -1) return -ENOSPC; + if (bmp->db_maxfreebud < 0 || bmp->db_maxfreebud > 63) { + jfs_error(ip->i_sb, + "invalid db_maxfreebud: %d\n", bmp->db_maxfreebud); + return -EIO; + } + max = (s64) 1 << bmp->db_maxfreebud; if (*nblocks >= max && *nblocks > nbperpage) nb = nblks = (max > nbperpage) ? max : nbperpage;