All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Li Zetao <lizetao1@huawei.com>
Cc: weiyongjun1@huawei.com, davem@davemloft.net, edumazet@google.com,
	f.fainelli@gmail.com, kuba@kernel.org,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	pabeni@redhat.com
Subject: Re: [PATCH net v2] r6040: Fix kmemleak in probe and remove
Date: Wed, 14 Dec 2022 09:14:31 +0200	[thread overview]
Message-ID: <Y5l312DJ4sSwBWUX@unreal> (raw)
In-Reply-To: <20221213125614.927754-1-lizetao1@huawei.com>

On Tue, Dec 13, 2022 at 08:56:14PM +0800, Li Zetao wrote:
> There is a memory leaks reported by kmemleak:
> 
>   unreferenced object 0xffff888116111000 (size 2048):
>     comm "modprobe", pid 817, jiffies 4294759745 (age 76.502s)
>     hex dump (first 32 bytes):
>       00 c4 0a 04 81 88 ff ff 08 10 11 16 81 88 ff ff  ................
>       08 10 11 16 81 88 ff ff 00 00 00 00 00 00 00 00  ................
>     backtrace:
>       [<ffffffff815bcd82>] kmalloc_trace+0x22/0x60
>       [<ffffffff827e20ee>] phy_device_create+0x4e/0x90
>       [<ffffffff827e6072>] get_phy_device+0xd2/0x220
>       [<ffffffff827e7844>] mdiobus_scan+0xa4/0x2e0
>       [<ffffffff827e8be2>] __mdiobus_register+0x482/0x8b0
>       [<ffffffffa01f5d24>] r6040_init_one+0x714/0xd2c [r6040]
>       ...
> 
> The problem occurs in probe process as follows:
>   r6040_init_one:
>     mdiobus_register
>       mdiobus_scan    <- alloc and register phy_device,
>                          the reference count of phy_device is 3
>     r6040_mii_probe
>       phy_connect     <- connect to the first phy_device,
>                          so the reference count of the first
>                          phy_device is 4, others are 3
>     register_netdev   <- fault inject succeeded, goto error handling path
> 
>     // error handling path
>     err_out_mdio_unregister:
>       mdiobus_unregister(lp->mii_bus);
>     err_out_mdio:
>       mdiobus_free(lp->mii_bus);    <- the reference count of the first
>                                        phy_device is 1, it is not released
>                                        and other phy_devices are released
>   // similarly, the remove process also has the same problem
> 
> The root cause is traced to the phy_device is not disconnected when
> removes one r6040 device in r6040_remove_one() or on error handling path
> after r6040_mii probed successfully. In r6040_mii_probe(), a net ethernet
> device is connected to the first PHY device of mii_bus, in order to
> notify the connected driver when the link status changes, which is the
> default behavior of the PHY infrastructure to handle everything.
> Therefore the phy_device should be disconnected when removes one r6040
> device or on error handling path.
> 
> Fix it by adding phy_disconnect() when removes one r6040 device or on
> error handling path after r6040_mii probed successfully.
> 
> Fixes: 3831861b4ad8 ("r6040: implement phylib")
> Signed-off-by: Li Zetao <lizetao1@huawei.com>
> ---
> v1 -> v2: change the subject prefix "PATCH" to "PATCH net" and change
> the goto label name "err_out_r6040_mii_remove" to "err_out_phy_disconnect"
> 
>  drivers/net/ethernet/rdc/r6040.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 

Please don't send new patches as reply-to.

Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>

  reply	other threads:[~2022-12-14  7:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-13 10:17 [PATCH] r6040: Fix kmemleak in probe and remove Li Zetao
2022-12-13  9:29 ` Wei Yongjun
2022-12-13 12:56   ` [PATCH net v2] " Li Zetao
2022-12-14  7:14     ` Leon Romanovsky [this message]
2022-12-15 12:00     ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y5l312DJ4sSwBWUX@unreal \
    --to=leon@kernel.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizetao1@huawei.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=weiyongjun1@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.