Message ID | 20241121-netpoll_rcu_herbet_fix-v1-1-457c5fee9dfd@debian.org (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] netpoll: Use rtnl_dereference() for npinfo pointer access | expand |
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 45fb60bc4803958eb07d4038028269fc0c19622e..30152811e0903a369ccca30500e11e696be158fd 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -626,7 +626,8 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev) goto out; } - if (!rcu_access_pointer(ndev->npinfo)) { + npinfo = rtnl_dereference(ndev->npinfo); + if (!npinfo) { npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL); if (!npinfo) { err = -ENOMEM; @@ -646,7 +647,6 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev) goto free_npinfo; } } else { - npinfo = rtnl_dereference(ndev->npinfo); refcount_inc(&npinfo->refcnt); }
In the __netpoll_setup() function, when accessing the device's npinfo pointer, replace rcu_access_pointer() with rtnl_dereference(). This change is more appropriate, as suggested by Herbert Xu. The function is called with the RTNL mutex held, and the pointer is being dereferenced later, so, dereference earlier and just reuse the pointer for the if/else. The replacement ensures correct pointer access while maintaining the existing locking and RCU semantics of the netpoll subsystem. Fixes: c75964e40e69 ("netpoll: Use rtnl_dereference() for npinfo pointer access") Suggested-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Breno Leitao <leitao@debian.org> --- net/core/netpoll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- base-commit: 66418447d27b7f4c027587582a133dd0bc0a663b change-id: 20241121-netpoll_rcu_herbet_fix-3f0a433b7860 Best regards,