diff options
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
| -rw-r--r-- | fs/xfs/xfs_log_recover.c | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index b1047de2fff..61af610d79b 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1455,10 +1455,19 @@ xlog_recover_add_to_trans(  	item = item->ri_prev;  	if (item->ri_total == 0) {		/* first region to be added */ -		item->ri_total	= in_f->ilf_size; -		ASSERT(item->ri_total <= XLOG_MAX_REGIONS_IN_ITEM); -		item->ri_buf = kmem_zalloc((item->ri_total * -					    sizeof(xfs_log_iovec_t)), KM_SLEEP); +		if (in_f->ilf_size == 0 || +		    in_f->ilf_size > XLOG_MAX_REGIONS_IN_ITEM) { +			xlog_warn( +	"XFS: bad number of regions (%d) in inode log format", +				  in_f->ilf_size); +			ASSERT(0); +			return XFS_ERROR(EIO); +		} + +		item->ri_total = in_f->ilf_size; +		item->ri_buf = +			kmem_zalloc(item->ri_total * sizeof(xfs_log_iovec_t), +				    KM_SLEEP);  	}  	ASSERT(item->ri_total > item->ri_cnt);  	/* Description region is ri_buf[0] */  |