diff mbox series

[v2,net] net: phy: micrel: Fix warn: passing zero to PTR_ERR

Message ID 20220719120052.26681-1-Divya.Koppera@microchip.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series [v2,net] net: phy: micrel: Fix warn: passing zero to PTR_ERR | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for net
netdev/fixes_present success Fixes tag present in non-next series
netdev/subject_prefix success Link
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers success CCed 9 of 9 maintainers
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 17 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Divya Koppera July 19, 2022, noon UTC
Handle the NULL pointer case

Fixes New smatch warnings:
drivers/net/phy/micrel.c:2613 lan8814_ptp_probe_once() warn: passing zero to 'PTR_ERR'

vim +/PTR_ERR +2613 drivers/net/phy/micrel.c

Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
---
v1 -> v2:
- Handled NULL pointer case
- Changed subject line with net-next to net
---
 drivers/net/phy/micrel.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Richard Cochran July 19, 2022, 1:56 p.m. UTC | #1
On Tue, Jul 19, 2022 at 05:30:52PM +0530, Divya Koppera wrote:
> Handle the NULL pointer case
> 
> Fixes New smatch warnings:
> drivers/net/phy/micrel.c:2613 lan8814_ptp_probe_once() warn: passing zero to 'PTR_ERR'
> 
> vim +/PTR_ERR +2613 drivers/net/phy/micrel.c
> 
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
> Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
> ---
> v1 -> v2:
> - Handled NULL pointer case
> - Changed subject line with net-next to net

This is not a genuine bug fix, and so it should target next-next.

> ---
>  drivers/net/phy/micrel.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
> index e78d0bf69bc3..6be6ee156f40 100644
> --- a/drivers/net/phy/micrel.c
> +++ b/drivers/net/phy/micrel.c
> @@ -2812,12 +2812,16 @@ static int lan8814_ptp_probe_once(struct phy_device *phydev)
>  
>  	shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
>  					       &phydev->mdio.dev);
> -	if (IS_ERR_OR_NULL(shared->ptp_clock)) {
> +	if (IS_ERR(shared->ptp_clock)) {
>  		phydev_err(phydev, "ptp_clock_register failed %lu\n",
>  			   PTR_ERR(shared->ptp_clock));
>  		return -EINVAL;
>  	}
>  
> +	/* Check if PHC support is missing at the configuration level */
> +	if (!shared->ptp_clock)
> +		return 0;

This is cause a NULL pointer de-reference in lan8814_ts_info()
when it calls 

	info->phc_index = ptp_clock_index(shared->ptp_clock);

> +
>  	phydev_dbg(phydev, "successfully registered ptp clock\n");
>  
>  	shared->phydev = phydev;
> -- 
> 2.17.1
> 

Thanks,
Richard
Divya Koppera July 20, 2022, 4:32 a.m. UTC | #2
Hi Richard,

> -----Original Message-----
> From: Richard Cochran <richardcochran@gmail.com>
> Sent: Tuesday, July 19, 2022 7:26 PM
> To: Divya Koppera - I30481 <Divya.Koppera@microchip.com>
> Cc: andrew@lunn.ch; hkallweit1@gmail.com; linux@armlinux.org.uk;
> davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> pabeni@redhat.com; netdev@vger.kernel.org; linux-
> kernel@vger.kernel.org; UNGLinuxDriver
> <UNGLinuxDriver@microchip.com>; Madhuri Sripada - I34878
> <Madhuri.Sripada@microchip.com>
> Subject: Re: [PATCH v2 net] net: phy: micrel: Fix warn: passing zero to
> PTR_ERR
> 
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> On Tue, Jul 19, 2022 at 05:30:52PM +0530, Divya Koppera wrote:
> > Handle the NULL pointer case
> >
> > Fixes New smatch warnings:
> > drivers/net/phy/micrel.c:2613 lan8814_ptp_probe_once() warn: passing
> zero to 'PTR_ERR'
> >
> > vim +/PTR_ERR +2613 drivers/net/phy/micrel.c
> >
> > Reported-by: kernel test robot <lkp@intel.com>
> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> > Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
> > Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
> > ---
> > v1 -> v2:
> > - Handled NULL pointer case
> > - Changed subject line with net-next to net
> 
> This is not a genuine bug fix, and so it should target next-next.
> 
> > ---
> >  drivers/net/phy/micrel.c | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index
> > e78d0bf69bc3..6be6ee156f40 100644
> > --- a/drivers/net/phy/micrel.c
> > +++ b/drivers/net/phy/micrel.c
> > @@ -2812,12 +2812,16 @@ static int lan8814_ptp_probe_once(struct
> > phy_device *phydev)
> >
> >       shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
> >                                              &phydev->mdio.dev);
> > -     if (IS_ERR_OR_NULL(shared->ptp_clock)) {
> > +     if (IS_ERR(shared->ptp_clock)) {
> >               phydev_err(phydev, "ptp_clock_register failed %lu\n",
> >                          PTR_ERR(shared->ptp_clock));
> >               return -EINVAL;
> >       }
> >
> > +     /* Check if PHC support is missing at the configuration level */
> > +     if (!shared->ptp_clock)
> > +             return 0;
> 
> This is cause a NULL pointer de-reference in lan8814_ts_info() when it calls
> 
>         info->phc_index = ptp_clock_index(shared->ptp_clock);
> 

NULL case handling seems to be redundant here because at starting of the function itself there is check for config support of ptp as below

static int lan8814_ptp_probe_once(struct phy_device *phydev)
{
        struct lan8814_shared_priv *shared = phydev->shared->priv;

        if (!IS_ENABLED(CONFIG_PTP_1588_CLOCK) ||
            !IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
                return 0;


So chances of getting shared-> ptp_clock to be NULL is 0.

Let me know your thoughts. I'll remove this check in next revision if it is redundant.

> > +
> >       phydev_dbg(phydev, "successfully registered ptp clock\n");
> >
> >       shared->phydev = phydev;
> > --
> > 2.17.1
> >
> 
> Thanks,
> Richard
Richard Cochran July 21, 2022, 2:16 p.m. UTC | #3
On Wed, Jul 20, 2022 at 04:32:55AM +0000, Divya.Koppera@microchip.com wrote:

> static int lan8814_ptp_probe_once(struct phy_device *phydev)
> {
>         struct lan8814_shared_priv *shared = phydev->shared->priv;
> 
>         if (!IS_ENABLED(CONFIG_PTP_1588_CLOCK) ||
>             !IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
>                 return 0;

It is weird to use macros here, but not before calling ptp_clock_register.
Make it consistent by checking shared->ptp_clock instead.
That is also better form.

Thanks,
Richard
diff mbox series

Patch

diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index e78d0bf69bc3..6be6ee156f40 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -2812,12 +2812,16 @@  static int lan8814_ptp_probe_once(struct phy_device *phydev)
 
 	shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
 					       &phydev->mdio.dev);
-	if (IS_ERR_OR_NULL(shared->ptp_clock)) {
+	if (IS_ERR(shared->ptp_clock)) {
 		phydev_err(phydev, "ptp_clock_register failed %lu\n",
 			   PTR_ERR(shared->ptp_clock));
 		return -EINVAL;
 	}
 
+	/* Check if PHC support is missing at the configuration level */
+	if (!shared->ptp_clock)
+		return 0;
+
 	phydev_dbg(phydev, "successfully registered ptp clock\n");
 
 	shared->phydev = phydev;