Hello Ajay Joshi,
The patch dd85b4922de1: "null_blk: return fixed zoned reads > write
pointer" from Oct 17, 2019, leads to the following static checker
warning:
drivers/block/null_blk_zoned.c:91 null_zone_valid_read_len()
warn: uncapped user index 'dev->zones[null_zone_no(dev, sector)]'
drivers/block/null_blk_zoned.c
87 size_t null_zone_valid_read_len(struct nullb *nullb,
88 sector_t sector, unsigned int len)
89 {
90 struct nullb_device *dev = nullb->dev;
91 struct blk_zone *zone = &dev->zones[null_zone_no(dev, sector)];
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
92 unsigned int nr_sectors = len >> SECTOR_SHIFT;
93
94 /* Read must be below the write pointer position */
95 if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
96 sector + nr_sectors <= zone->wp)
97 return len;
98
99 if (sector > zone->wp)
^^^^^^^^^^^^^^^^^
Smatch complains about "sector" being from the untrusted all the time
and I kind of just ignore it these days. But here it looks like we're
checking "sector" after we already used it so that seems very suspicious.
It feels like "sector > zone->wp" should come at the very start of the
function.
100 return 0;
101
102 return (zone->wp - sector) << SECTOR_SHIFT;
103 }
regards,
dan carpenter