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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to