Subject: Re: [PATCH net-next] net/fsl: xgmac_mdio: fix return value check in xgmac_mdio_probe()

From: Dan Carpenter <[email-masked]>
Date: Tue, 1 Feb 2022 14:07:11 +0300

On Sun, Jan 30, 2022 at 08:58:55AM +0800, weiyongjun (A) wrote:
> 
> > On Sat, Jan 29, 2022 at 01:27, Wei Yongjun <[email-masked]> wrote:
> > > In case of error, the function devm_ioremap() returns NULL pointer
> > > not ERR_PTR(). The IS_ERR() test in the return value check should
> > > be replaced with NULL test.
> > > 
> > > Fixes: 1d14eb15dc2c ("net/fsl: xgmac_mdio: Use managed device resources")
> > > Reported-by: Hulk Robot <[email-masked]>
> > > Signed-off-by: Wei Yongjun <[email-masked]>
> > Reviewed-by: Tobias Waldekranz <[email-masked]>
> > 
> > Sorry about that. I started out by using devm_ioremap_resource, which
> > uses the in-band error signaling, and forgot to match the guard when I
> > changed it.
> > 
> > I see that this was reported by your CI, do you mind me asking what it
> > is running in the back-end? At least my version of sparse does not seem
> > to catch this.
> 
> 
> It was reported by coccinelle with follow script:
> 
> 
> @@
> expression ret, E;
> @@
> ret = \(devm_ioport_map\|
> devm_ioremap\|
> devm_ioremap_wc\|
> devm_irq_alloc_generic_chip\|
> devm_kasprintf\|
> devm_kcalloc\|
> devm_kmalloc\|
> devm_kmalloc_array\|
> devm_kmemdup\|
> devm_kstrdup\|
> devm_kzalloc\|
> \)(...);
> ... when != ret = E
> (
> - IS_ERR(ret)
> + !ret
> |
> - !IS_ERR(ret)
> + ret
> |
> - PTR_ERR(ret)
> + -ENOMEM
> )
> 
> 
> 
> It seems smatch also can report this.

Yeah.  I had this patch in my postponed messages but you beat me to
sending it.

The Smatch check for this requires you to have the cross function
database built.  I should update it to remove that requirement for
at least the common functions that you have listed.

regards,
dan carpenter