| From 73e2d5e34b6cdd1080038daf3d6d6d744a9eefe6 Mon Sep 17 00:00:00 2001 |
| From: Pablo Neira <pablo@netfilter.org> |
| Date: Mon, 14 Nov 2016 23:40:30 +0100 |
| Subject: udp: restore UDPlite many-cast delivery |
| |
| From: Pablo Neira <pablo@netfilter.org> |
| |
| commit 73e2d5e34b6cdd1080038daf3d6d6d744a9eefe6 upstream. |
| |
| Honor udptable parameter that is passed to __udp*_lib_mcast_deliver(), |
| otherwise udplite broadcast/multicast use the wrong table and it breaks. |
| |
| Fixes: 2dc41cff7545 ("udp: Use hash2 for long hash1 chains in __udp*_lib_mcast_deliver.") |
| Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> |
| Acked-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/ipv4/udp.c | 6 +++--- |
| net/ipv6/udp.c | 6 +++--- |
| 2 files changed, 6 insertions(+), 6 deletions(-) |
| |
| --- a/net/ipv4/udp.c |
| +++ b/net/ipv4/udp.c |
| @@ -1685,10 +1685,10 @@ static int __udp4_lib_mcast_deliver(stru |
| |
| if (use_hash2) { |
| hash2_any = udp4_portaddr_hash(net, htonl(INADDR_ANY), hnum) & |
| - udp_table.mask; |
| - hash2 = udp4_portaddr_hash(net, daddr, hnum) & udp_table.mask; |
| + udptable->mask; |
| + hash2 = udp4_portaddr_hash(net, daddr, hnum) & udptable->mask; |
| start_lookup: |
| - hslot = &udp_table.hash2[hash2]; |
| + hslot = &udptable->hash2[hash2]; |
| offset = offsetof(typeof(*sk), __sk_common.skc_portaddr_node); |
| } |
| |
| --- a/net/ipv6/udp.c |
| +++ b/net/ipv6/udp.c |
| @@ -801,10 +801,10 @@ static int __udp6_lib_mcast_deliver(stru |
| |
| if (use_hash2) { |
| hash2_any = udp6_portaddr_hash(net, &in6addr_any, hnum) & |
| - udp_table.mask; |
| - hash2 = udp6_portaddr_hash(net, daddr, hnum) & udp_table.mask; |
| + udptable->mask; |
| + hash2 = udp6_portaddr_hash(net, daddr, hnum) & udptable->mask; |
| start_lookup: |
| - hslot = &udp_table.hash2[hash2]; |
| + hslot = &udptable->hash2[hash2]; |
| offset = offsetof(typeof(*sk), __sk_common.skc_portaddr_node); |
| } |
| |