Message ID | 20231206172122.859df6ba937f.I9c80608bcfbab171943ff4942b52dbd5e97fe06e@changeid (mailing list archive) |
---|---|
State | Accepted |
Commit | bf17b36ccdd5b7b9dd482d7753bcb9aff2d21d39 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: sysfs: fix locking in carrier read | expand |
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Wed, 6 Dec 2023 17:21:23 +0100 you wrote: > From: Johannes Berg <johannes.berg@intel.com> > > My previous patch added a call to linkwatch_sync_dev(), > but that of course needs to be called under RTNL, which > I missed earlier, but now saw RCU warnings from. > > Fix that by acquiring the RTNL in a similar fashion to > how other files do it here. > > [...] Here is the summary with links: - [net-next] net: sysfs: fix locking in carrier read https://git.kernel.org/netdev/net-next/c/bf17b36ccdd5 You are awesome, thank you!
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index d9b33e923b18..a09d507c5b03 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -193,6 +193,10 @@ static ssize_t carrier_show(struct device *dev, struct device_attribute *attr, char *buf) { struct net_device *netdev = to_net_dev(dev); + int ret = -EINVAL; + + if (!rtnl_trylock()) + return restart_syscall(); if (netif_running(netdev)) { /* Synchronize carrier state with link watch, @@ -200,10 +204,11 @@ static ssize_t carrier_show(struct device *dev, */ linkwatch_sync_dev(netdev); - return sysfs_emit(buf, fmt_dec, !!netif_carrier_ok(netdev)); + ret = sysfs_emit(buf, fmt_dec, !!netif_carrier_ok(netdev)); } + rtnl_unlock(); - return -EINVAL; + return ret; } static DEVICE_ATTR_RW(carrier);