Subject: Re: Coverity: erofs_get_pcpubuf(): Program hangs

From: Gao Xiang <[email-masked]>
Date: Fri, 9 Apr 2021 09:06:02 +0800

Hi,

On Thu, Apr 08, 2021 at 05:09:53PM -0700, coverity-bot wrote:
> Hello!
> 
> This is an experimental semi-automated report about issues detected by
> Coverity from a scan of next-20210408 as part of the linux-next scan project:
> https://scan.coverity.com/projects/linux-next-weekly-scan
> 
> You're getting this email because you were associated with the identified
> lines of code (noted below) that were touched by commits:
> 
>   Wed Apr 7 12:41:22 2021 +0800
>     91a196935395 ("erofs: introduce multipage per-CPU buffers")
> 
> Coverity reported the following:
> 
> *** CID 1503700:  Program hangs  (LOCK)
> /fs/erofs/pcpubuf.c: 31 in erofs_get_pcpubuf()
> 25     	raw_spin_lock(&pcb->lock);
> 26     	if (requiredpages > pcb->nrpages) {
> 27     		raw_spin_unlock(&pcb->lock);
> 28     		put_cpu_var(erofs_pcb);
> 29     		return NULL;
> 30     	}
> vvv     CID 1503700:  Program hangs  (LOCK)
> vvv     Returning without unlocking "pcb->lock".
> 31     	return pcb->ptr;
> 32     }
> 33
> 34     void erofs_put_pcpubuf(void *ptr)
> 35     {
> 36     	struct erofs_pcpubuf *pcb = &per_cpu(erofs_pcb, smp_processor_id());
> 
> If this is a false positive, please let us know so we can mark it as
> such, or teach the Coverity rules to be smarter. If not, please make
> sure fixes get into linux-next. :) For patches fixing this, please
> include these lines (but double-check the "Fixes" first):

I think this is a false positive here, since erofs_get_pcpubuf() should match
with erofs_put_pcpubuf(), which is used to unlock pcb->lock.

Thanks,
Gao Xiang

> 
> Reported-by: coverity-bot <[email-masked]>
> Addresses-Coverity-ID: 1503700 ("Program hangs")
> Fixes: 91a196935395 ("erofs: introduce multipage per-CPU buffers")
> 
> Thanks for your attention!
> 
> -- 
> Coverity-bot
>