On Fri, Nov 11, 2022 at 09:42:38AM +0900, Sergey Senozhatsky wrote: > 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; It would, but given this is a clear false positive, don't feel the need to add this just for Coverity's sake. It is a nice bit of added robustness, but I leave that decision up to you! :) -- Kees Cook