Re: [PATCH net] net: phy: leds: fix memory leak

From: Andrew Lunn
Date: Thu Apr 17 2025 - 09:55:54 EST


On Thu, Apr 17, 2025 at 11:25:56AM +0800, Qingfang Deng wrote:
> From: Qingfang Deng <qingfang.deng@xxxxxxxxxxxxxxx>
>
> A network restart test on a router led to an out-of-memory condition,
> which was traced to a memory leak in the PHY LED trigger code.
>
> The root cause is misuse of the devm API. The registration function
> (phy_led_triggers_register) is called from phy_attach_direct, not
> phy_probe, and the unregister function (phy_led_triggers_unregister)
> is called from phy_detach, not phy_remove. This means the register and
> unregister functions can be called multiple times for the same PHY
> device, but devm-allocated memory is not freed until the driver is
> unbound.
>
> This also prevents kmemleak from detecting the leak, as the devm API
> internally stores the allocated pointer.
>
> Fix this by replacing devm_kzalloc/devm_kcalloc with standard
> kzalloc/kcalloc, and add the corresponding kfree calls in the unregister
> path.
>
> Fixes: 3928ee6485a3 ("net: phy: leds: Add support for "link" trigger")
> Fixes: 2e0bc452f472 ("net: phy: leds: add support for led triggers on phy link state change")
> Signed-off-by: Hao Guan <hao.guan@xxxxxxxxxxxxxxx>
> Signed-off-by: Qingfang Deng <qingfang.deng@xxxxxxxxxxxxxxx>

Thanks for the fix. I agree with Maxime, this looks correct.

Reviewed-by: Andrew Lunn <andrew@xxxxxxx>

The use of devm_free() should trigger any reviewer to take a closer
look because it generally means something is wrong.

Andrew