On (22/11/11 09:37), Sergey Senozhatsky wrote: > On (22/11/10 08:47), coverity-bot wrote: > [..] > > 1704 class_index_old = zs_lookup_class_index(zram->mem_pool, comp_len_old); > > 1705 /* > > 1706 * Iterate the secondary comp algorithms list (in order of priority) > > 1707 * and try to recompress the page. > > 1708 */ > > 1709 for (; prio < prio_max; prio++) { > > vvv CID 1527270: (OVERRUN) > > vvv Overrunning array "zram->comps" of 4 8-byte elements at element index 4 (byte offset 39) using index "prio" (which evaluates to 4). > > 1710 if (!zram->comps[prio]) > > 1711 continue; > > 1712 > > 1713 /* > > 1714 * Skip if the object is already re-compressed with a higher > > 1715 * priority algorithm (or same algorithm). > > prio_max is always limited and max value it can have is 4 (ZRAM_MAX_COMPS). > Depending on use case we can limit prio_max even to lower values. > > So we have > > for (; prio < 4; prio++) { > foo = comps[prio]; > } > > I don't see how prio can be 4 inside of this loop. Kees, if we do something like this will it make coverity happy? --- diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 9d33801e8ba8..e67a124f2e88 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1706,6 +1706,7 @@ static int zram_recompress(struct zram *zram, u32 index, struct page *page, * Iterate the secondary comp algorithms list (in order of priority) * and try to recompress the page. */ + prio_max = min(prio_max, ZRAM_MAX_COMPS); for (; prio < prio_max; prio++) { if (!zram->comps[prio]) continue;