aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/geneve.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/net/ipv4/geneve.c b/net/ipv4/geneve.c
index 4fe5a592821c..5b52046ec7a2 100644
--- a/net/ipv4/geneve.c
+++ b/net/ipv4/geneve.c
@@ -65,14 +65,15 @@ static inline struct genevehdr *geneve_hdr(const struct sk_buff *skb)
65 return (struct genevehdr *)(udp_hdr(skb) + 1); 65 return (struct genevehdr *)(udp_hdr(skb) + 1);
66} 66}
67 67
68/* Find geneve socket based on network namespace and UDP port */ 68static struct geneve_sock *geneve_find_sock(struct net *net,
69static struct geneve_sock *geneve_find_sock(struct net *net, __be16 port) 69 sa_family_t family, __be16 port)
70{ 70{
71 struct geneve_net *gn = net_generic(net, geneve_net_id); 71 struct geneve_net *gn = net_generic(net, geneve_net_id);
72 struct geneve_sock *gs; 72 struct geneve_sock *gs;
73 73
74 list_for_each_entry(gs, &gn->sock_list, list) { 74 list_for_each_entry(gs, &gn->sock_list, list) {
75 if (inet_sk(gs->sock->sk)->inet_sport == port) 75 if (inet_sk(gs->sock->sk)->inet_sport == port &&
76 inet_sk(gs->sock->sk)->sk.sk_family == family)
76 return gs; 77 return gs;
77 } 78 }
78 79
@@ -375,7 +376,7 @@ struct geneve_sock *geneve_sock_add(struct net *net, __be16 port,
375 376
376 mutex_lock(&geneve_mutex); 377 mutex_lock(&geneve_mutex);
377 378
378 gs = geneve_find_sock(net, port); 379 gs = geneve_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port);
379 if (gs) { 380 if (gs) {
380 if (!no_share && gs->rcv == rcv) 381 if (!no_share && gs->rcv == rcv)
381 gs->refcnt++; 382 gs->refcnt++;