Commit af65faf3 authored by Caleb Sander Mateos's avatar Caleb Sander Mateos Committed by Jens Axboe
Browse files

block: validate interval_exp integrity limit



Various code assumes that the integrity interval is at least 1 sector
and evenly divides the logical block size. Add these checks to
blk_validate_integrity_limits(). This guards against block drivers that
report invalid interval_exp values.

Signed-off-by: default avatarCaleb Sander Mateos <csander@purestorage.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ccb8a3c0
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -193,8 +193,13 @@ static int blk_validate_integrity_limits(struct queue_limits *lim)
		break;
	}

	if (!bi->interval_exp)
	if (!bi->interval_exp) {
		bi->interval_exp = ilog2(lim->logical_block_size);
	} else if (bi->interval_exp < SECTOR_SHIFT ||
		   bi->interval_exp > ilog2(lim->logical_block_size)) {
		pr_warn("invalid interval_exp %u\n", bi->interval_exp);
		return -EINVAL;
	}

	/*
	 * The PI generation / validation helpers do not expect intervals to