diff options
| author | Stanislav Fomichev <[email protected]> | 2025-03-05 16:37:29 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2025-03-06 20:59:45 +0000 |
| commit | df43d8bf10316a7c3b1e47e3cc0057a54df4a5b8 (patch) | |
| tree | d31253686f41f2bdad50762ea5b86bf56cc7ad25 /net/core/net-sysfs.c | |
| parent | net: ethtool: try to protect all callback with netdev instance lock (diff) | |
| download | kernel-df43d8bf10316a7c3b1e47e3cc0057a54df4a5b8.tar.gz kernel-df43d8bf10316a7c3b1e47e3cc0057a54df4a5b8.zip | |
net: replace dev_addr_sem with netdev instance lock
Lockdep reports possible circular dependency in [0]. Instead of
fixing the ordering, replace global dev_addr_sem with netdev
instance lock. Most of the paths that set/get mac are RTNL
protected. Two places where it's not, convert to explicit
locking:
- sysfs address_show
- dev_get_mac_address via dev_ioctl
0: https://netdev-3.bots.linux.dev/vmksft-forwarding-dbg/results/993321/24-router-bridge-1d-lag-sh/stderr
Signed-off-by: Stanislav Fomichev <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'net/core/net-sysfs.c')
| -rw-r--r-- | net/core/net-sysfs.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 27eea34d1b41..02d1d40b47ae 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -262,14 +262,11 @@ static ssize_t address_show(struct device *dev, struct device_attribute *attr, struct net_device *ndev = to_net_dev(dev); ssize_t ret = -EINVAL; - down_read(&dev_addr_sem); - - rcu_read_lock(); + netdev_lock(ndev); if (dev_isalive(ndev)) ret = sysfs_format_mac(buf, ndev->dev_addr, ndev->addr_len); - rcu_read_unlock(); + netdev_unlock(ndev); - up_read(&dev_addr_sem); return ret; } static DEVICE_ATTR_RO(address); |
