Re: [PATCH net-next] net: phy: Fix suspicious rcu_dereference usage
From: Kory Maincent <kory.maincent@bootlin.com>
Date: 2025-01-17 17:09:19
Also in:
lkml
On Fri, 17 Jan 2025 15:14:45 +0100 Kory Maincent [off-list ref] wrote:
The phy_detach function can be called with or without the rtnl lock held. When the rtnl lock is not held, using rtnl_dereference() triggers a warning due to the lack of lock context. Add an rcu_read_lock() to ensure the lock is acquired and to maintain synchronization.
Sent the wrong patch which have a ; missing. pw-bot: cr
quoted hunk ↗ jump to hunk
Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Reported-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Closes: https://lore.kernel.org/netdev/4c6419d8-c06b-495c-b987-d66c2e1ff848@tuxon.dev/ (local) Fixes: 35f7cad1743e ("net: Add the possibility to support a selected hwtstamp in netdevice") Signed-off-by: Kory Maincent [off-list ref] --- drivers/net/phy/phy_device.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 5b34d39d1d52..b9b9aa16c10a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c@@ -2001,12 +2001,14 @@ void phy_detach(struct phy_device *phydev) if (dev) { struct hwtstamp_provider *hwprov; - hwprov = rtnl_dereference(dev->hwprov); + rcu_read_lock() + hwprov = rcu_dereference(dev->hwprov); /* Disable timestamp if it is the one selected */ if (hwprov && hwprov->phydev == phydev) { rcu_assign_pointer(dev->hwprov, NULL); kfree_rcu(hwprov, rcu_head); } + rcu_read_unlock(); phydev->attached_dev->phydev = NULL; phydev->attached_dev = NULL;
-- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com