mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00
tcp: convert to dev_net_rcu()
TCP uses of dev_net() are under RCU protection, change them to dev_net_rcu() to get LOCKDEP support. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> Link: https://patch.msgid.link/20250301201424.2046477-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a11a791ca8
commit
e7b9ecce56
@ -150,7 +150,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo,
|
||||
int iif, int sdif,
|
||||
bool *refcounted)
|
||||
{
|
||||
struct net *net = dev_net(skb_dst(skb)->dev);
|
||||
struct net *net = dev_net_rcu(skb_dst(skb)->dev);
|
||||
const struct ipv6hdr *ip6h = ipv6_hdr(skb);
|
||||
struct sock *sk;
|
||||
|
||||
|
@ -492,7 +492,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
|
||||
const int sdif,
|
||||
bool *refcounted)
|
||||
{
|
||||
struct net *net = dev_net(skb_dst(skb)->dev);
|
||||
struct net *net = dev_net_rcu(skb_dst(skb)->dev);
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
struct sock *sk;
|
||||
|
||||
|
@ -494,14 +494,14 @@ int tcp_v4_err(struct sk_buff *skb, u32 info)
|
||||
{
|
||||
const struct iphdr *iph = (const struct iphdr *)skb->data;
|
||||
struct tcphdr *th = (struct tcphdr *)(skb->data + (iph->ihl << 2));
|
||||
struct tcp_sock *tp;
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
const int type = icmp_hdr(skb)->type;
|
||||
const int code = icmp_hdr(skb)->code;
|
||||
struct sock *sk;
|
||||
struct request_sock *fastopen;
|
||||
struct tcp_sock *tp;
|
||||
u32 seq, snd_una;
|
||||
struct sock *sk;
|
||||
int err;
|
||||
struct net *net = dev_net(skb->dev);
|
||||
|
||||
sk = __inet_lookup_established(net, net->ipv4.tcp_death_row.hashinfo,
|
||||
iph->daddr, th->dest, iph->saddr,
|
||||
@ -786,7 +786,7 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
|
||||
arg.iov[0].iov_base = (unsigned char *)&rep;
|
||||
arg.iov[0].iov_len = sizeof(rep.th);
|
||||
|
||||
net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
|
||||
net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev);
|
||||
|
||||
/* Invalid TCP option size or twice included auth */
|
||||
if (tcp_parse_auth_options(tcp_hdr(skb), &md5_hash_location, &aoh))
|
||||
@ -1961,7 +1961,7 @@ EXPORT_SYMBOL(tcp_v4_do_rcv);
|
||||
|
||||
int tcp_v4_early_demux(struct sk_buff *skb)
|
||||
{
|
||||
struct net *net = dev_net(skb->dev);
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
const struct iphdr *iph;
|
||||
const struct tcphdr *th;
|
||||
struct sock *sk;
|
||||
@ -2172,7 +2172,7 @@ static void tcp_v4_fill_cb(struct sk_buff *skb, const struct iphdr *iph,
|
||||
|
||||
int tcp_v4_rcv(struct sk_buff *skb)
|
||||
{
|
||||
struct net *net = dev_net(skb->dev);
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
enum skb_drop_reason drop_reason;
|
||||
int sdif = inet_sdif(skb);
|
||||
int dif = inet_iif(skb);
|
||||
|
@ -170,7 +170,7 @@ static struct tcp_metrics_block *tcpm_new(struct dst_entry *dst,
|
||||
bool reclaim = false;
|
||||
|
||||
spin_lock_bh(&tcp_metrics_lock);
|
||||
net = dev_net(dst->dev);
|
||||
net = dev_net_rcu(dst->dev);
|
||||
|
||||
/* While waiting for the spin-lock the cache might have been populated
|
||||
* with this entry and so we have to check again.
|
||||
@ -273,7 +273,7 @@ static struct tcp_metrics_block *__tcp_get_metrics_req(struct request_sock *req,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
net = dev_net(dst->dev);
|
||||
net = dev_net_rcu(dst->dev);
|
||||
hash ^= net_hash_mix(net);
|
||||
hash = hash_32(hash, tcp_metrics_hash_log);
|
||||
|
||||
@ -318,7 +318,7 @@ static struct tcp_metrics_block *tcp_get_metrics(struct sock *sk,
|
||||
else
|
||||
return NULL;
|
||||
|
||||
net = dev_net(dst->dev);
|
||||
net = dev_net_rcu(dst->dev);
|
||||
hash ^= net_hash_mix(net);
|
||||
hash = hash_32(hash, tcp_metrics_hash_log);
|
||||
|
||||
|
@ -376,7 +376,7 @@ static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
{
|
||||
const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data;
|
||||
const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
|
||||
struct net *net = dev_net(skb->dev);
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
struct request_sock *fastopen;
|
||||
struct ipv6_pinfo *np;
|
||||
struct tcp_sock *tp;
|
||||
@ -866,16 +866,16 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32
|
||||
int oif, int rst, u8 tclass, __be32 label,
|
||||
u32 priority, u32 txhash, struct tcp_key *key)
|
||||
{
|
||||
const struct tcphdr *th = tcp_hdr(skb);
|
||||
struct tcphdr *t1;
|
||||
struct sk_buff *buff;
|
||||
struct flowi6 fl6;
|
||||
struct net *net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
|
||||
struct sock *ctl_sk = net->ipv6.tcp_sk;
|
||||
struct net *net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev);
|
||||
unsigned int tot_len = sizeof(struct tcphdr);
|
||||
struct sock *ctl_sk = net->ipv6.tcp_sk;
|
||||
const struct tcphdr *th = tcp_hdr(skb);
|
||||
__be32 mrst = 0, *topt;
|
||||
struct dst_entry *dst;
|
||||
__u32 mark = 0;
|
||||
struct sk_buff *buff;
|
||||
struct tcphdr *t1;
|
||||
struct flowi6 fl6;
|
||||
u32 mark = 0;
|
||||
|
||||
if (tsecr)
|
||||
tot_len += TCPOLEN_TSTAMP_ALIGNED;
|
||||
@ -1041,7 +1041,7 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb,
|
||||
if (!sk && !ipv6_unicast_destination(skb))
|
||||
return;
|
||||
|
||||
net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
|
||||
net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev);
|
||||
/* Invalid TCP option size or twice included auth */
|
||||
if (tcp_parse_auth_options(th, &md5_hash_location, &aoh))
|
||||
return;
|
||||
@ -1740,6 +1740,7 @@ static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr,
|
||||
|
||||
INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb)
|
||||
{
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
enum skb_drop_reason drop_reason;
|
||||
int sdif = inet6_sdif(skb);
|
||||
int dif = inet6_iif(skb);
|
||||
@ -1749,7 +1750,6 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb)
|
||||
bool refcounted;
|
||||
int ret;
|
||||
u32 isn;
|
||||
struct net *net = dev_net(skb->dev);
|
||||
|
||||
drop_reason = SKB_DROP_REASON_NOT_SPECIFIED;
|
||||
if (skb->pkt_type != PACKET_HOST)
|
||||
@ -2001,7 +2001,7 @@ do_time_wait:
|
||||
|
||||
void tcp_v6_early_demux(struct sk_buff *skb)
|
||||
{
|
||||
struct net *net = dev_net(skb->dev);
|
||||
struct net *net = dev_net_rcu(skb->dev);
|
||||
const struct ipv6hdr *hdr;
|
||||
const struct tcphdr *th;
|
||||
struct sock *sk;
|
||||
|
Loading…
x
Reference in New Issue
Block a user