Re: [PATCH] block:Remove extra condition in end of disk check

From: Raghavendra K T
Date: Tue Jun 25 2013 - 01:06:28 EST


On 06/25/2013 04:21 AM, Tejun Heo wrote:
On Mon, Jun 24, 2013 at 07:20:12PM +0530, Raghavendra K T wrote:
@@ -1656,7 +1656,7 @@ static inline int bio_check_eod(struct bio *bio, unsigned int nr_sectors)
if (maxsector) {
sector_t sector = bio->bi_sector;

- if (maxsector < nr_sectors || maxsector - nr_sectors < sector) {
+ if (maxsector - nr_sectors < sector) {

If maxsector < nr_sectors, the subtraction will underflow making it a
very large number and fail to detect the invalid condition, no?


Hi Tejun,
Thanks for the reply and explanation. You are right. underflow results
in invalid condition.

Considering maxsector and sectors are unsigned long, and nr_sector is
unsigned int, probably safer bet is
(max_sector < sector + nr_sector), but still it would leave scope for overflow.

Thanks again,
Raghu.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/