diff options
| author | Eric Dumazet <edumazet@google.com> | 2025-02-05 15:51:09 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-02-21 14:01:41 +0100 |
| commit | ec9af76451095b82680012bb6d3575e34a6ee205 (patch) | |
| tree | 9555b9c62b00d5647884a287057bce2fb3a52bb1 /include | |
| parent | dfe542e745fcedbe46f964d5fb6c954aada823b1 (diff) | |
| download | linux-ec9af76451095b82680012bb6d3575e34a6ee205.tar.gz linux-ec9af76451095b82680012bb6d3575e34a6ee205.tar.bz2 linux-ec9af76451095b82680012bb6d3575e34a6ee205.zip | |
net: add dev_net_rcu() helper
[ Upstream commit 482ad2a4ace2740ca0ff1cbc8f3c7f862f3ab507 ]
dev->nd_net can change, readers should either
use rcu_read_lock() or RTNL.
We currently use a generic helper, dev_net() with
no debugging support. We probably have many hidden bugs.
Add dev_net_rcu() helper for callers using rcu_read_lock()
protection.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250205155120.1676781-2-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Stable-dep-of: 71b8471c93fa ("ipv4: use RCU protection in ipv4_default_advmss()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/netdevice.h | 6 | ||||
| -rw-r--r-- | include/net/net_namespace.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 02d3bafebbe7..4f17b786828a 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -2578,6 +2578,12 @@ struct net *dev_net(const struct net_device *dev) } static inline +struct net *dev_net_rcu(const struct net_device *dev) +{ + return read_pnet_rcu(&dev->nd_net); +} + +static inline void dev_net_set(struct net_device *dev, struct net *net) { write_pnet(&dev->nd_net, net); diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 9398c8f49953..da93873df4db 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -387,7 +387,7 @@ static inline struct net *read_pnet(const possible_net_t *pnet) #endif } -static inline struct net *read_pnet_rcu(possible_net_t *pnet) +static inline struct net *read_pnet_rcu(const possible_net_t *pnet) { #ifdef CONFIG_NET_NS return rcu_dereference(pnet->net); |
