@@ -472,7 +472,7 @@ static struct sock *udp4_lookup_run_bpf(struct net *net,
472472 struct sock * sk , * reuse_sk ;
473473 bool no_reuseport ;
474474
475- if (udptable != & udp_table )
475+ if (udptable != net -> ipv4 . udp_table )
476476 return NULL ; /* only UDP is supported */
477477
478478 no_reuseport = bpf_sk_lookup_run_v4 (net , IPPROTO_UDP , saddr , sport ,
@@ -553,10 +553,11 @@ struct sock *udp4_lib_lookup_skb(const struct sk_buff *skb,
553553 __be16 sport , __be16 dport )
554554{
555555 const struct iphdr * iph = ip_hdr (skb );
556+ struct net * net = dev_net (skb -> dev );
556557
557- return __udp4_lib_lookup (dev_net ( skb -> dev ) , iph -> saddr , sport ,
558+ return __udp4_lib_lookup (net , iph -> saddr , sport ,
558559 iph -> daddr , dport , inet_iif (skb ),
559- inet_sdif (skb ), & udp_table , NULL );
560+ inet_sdif (skb ), net -> ipv4 . udp_table , NULL );
560561}
561562
562563/* Must be called under rcu_read_lock().
@@ -569,7 +570,7 @@ struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
569570 struct sock * sk ;
570571
571572 sk = __udp4_lib_lookup (net , saddr , sport , daddr , dport ,
572- dif , 0 , & udp_table , NULL );
573+ dif , 0 , net -> ipv4 . udp_table , NULL );
573574 if (sk && !refcount_inc_not_zero (& sk -> sk_refcnt ))
574575 sk = NULL ;
575576 return sk ;
@@ -807,7 +808,7 @@ int __udp4_lib_err(struct sk_buff *skb, u32 info, struct udp_table *udptable)
807808
808809int udp_err (struct sk_buff * skb , u32 info )
809810{
810- return __udp4_lib_err (skb , info , & udp_table );
811+ return __udp4_lib_err (skb , info , dev_net ( skb -> dev ) -> ipv4 . udp_table );
811812}
812813
813814/*
@@ -2524,13 +2525,14 @@ static struct sock *__udp4_lib_mcast_demux_lookup(struct net *net,
25242525 __be16 rmt_port , __be32 rmt_addr ,
25252526 int dif , int sdif )
25262527{
2528+ struct udp_table * udptable = net -> ipv4 .udp_table ;
25272529 unsigned short hnum = ntohs (loc_port );
25282530 struct sock * sk , * result ;
25292531 struct udp_hslot * hslot ;
25302532 unsigned int slot ;
25312533
2532- slot = udp_hashfn (net , hnum , udp_table . mask );
2533- hslot = & udp_table . hash [slot ];
2534+ slot = udp_hashfn (net , hnum , udptable -> mask );
2535+ hslot = & udptable -> hash [slot ];
25342536
25352537 /* Do not bother scanning a too big list */
25362538 if (hslot -> count > 10 )
@@ -2558,6 +2560,7 @@ static struct sock *__udp4_lib_demux_lookup(struct net *net,
25582560 __be16 rmt_port , __be32 rmt_addr ,
25592561 int dif , int sdif )
25602562{
2563+ struct udp_table * udptable = net -> ipv4 .udp_table ;
25612564 INET_ADDR_COOKIE (acookie , rmt_addr , loc_addr );
25622565 unsigned short hnum = ntohs (loc_port );
25632566 unsigned int hash2 , slot2 ;
@@ -2566,8 +2569,8 @@ static struct sock *__udp4_lib_demux_lookup(struct net *net,
25662569 struct sock * sk ;
25672570
25682571 hash2 = ipv4_portaddr_hash (net , loc_addr , hnum );
2569- slot2 = hash2 & udp_table . mask ;
2570- hslot2 = & udp_table . hash2 [slot2 ];
2572+ slot2 = hash2 & udptable -> mask ;
2573+ hslot2 = & udptable -> hash2 [slot2 ];
25712574 ports = INET_COMBINED_PORTS (rmt_port , hnum );
25722575
25732576 udp_portaddr_for_each_entry_rcu (sk , & hslot2 -> head ) {
@@ -2649,7 +2652,7 @@ int udp_v4_early_demux(struct sk_buff *skb)
26492652
26502653int udp_rcv (struct sk_buff * skb )
26512654{
2652- return __udp4_lib_rcv (skb , & udp_table , IPPROTO_UDP );
2655+ return __udp4_lib_rcv (skb , dev_net ( skb -> dev ) -> ipv4 . udp_table , IPPROTO_UDP );
26532656}
26542657
26552658void udp_destroy_sock (struct sock * sk )
0 commit comments