From 7d906d22cf1953641303966a756f3c44535001ae Mon Sep 17 00:00:00 2001 From: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Sun, 10 Sep 2017 16:02:05 +0200 Subject: pfinet: select UDP/TCP ports randomly * pfinet/linux-src/include/net/tcp.h (tcp_port_rover): Remove declaration * pfinet/linux-src/include/net/udp.h (udp_port_rover): Likewise. * pfinet/linux-src/net/ipv4/tcp_ipv4.c (tcp_port_rover): Remove variable. (tcp_v4_get_port): Take port hint from net_random() instead of tcp_port_rover. * pfinet/linux-src/net/ipv4/udp.c (udp_port_rover, udp_v4_get_port): Likewise. * pfinet/linux-src/net/ipv6/tcp_ipv6.c (tcp_v6_get_port): Likewise. * pfinet/linux-src/net/ipv6/udp_ipv6.c (udp_v6_get_port): Likewise. --- pfinet/linux-src/net/ipv6/udp_ipv6.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'pfinet/linux-src/net/ipv6/udp_ipv6.c') diff --git a/pfinet/linux-src/net/ipv6/udp_ipv6.c b/pfinet/linux-src/net/ipv6/udp_ipv6.c index bbc4f027..f838d251 100644 --- a/pfinet/linux-src/net/ipv6/udp_ipv6.c +++ b/pfinet/linux-src/net/ipv6/udp_ipv6.c @@ -92,13 +92,12 @@ static int udp_v6_get_port(struct sock *sk, unsigned short snum) { SOCKHASH_LOCK(); if (snum == 0) { + int low = sysctl_local_port_range[0]; + int high = sysctl_local_port_range[1]; int best_size_so_far, best, result, i; - if (udp_port_rover > sysctl_local_port_range[1] || - udp_port_rover < sysctl_local_port_range[0]) - udp_port_rover = sysctl_local_port_range[0]; best_size_so_far = 32767; - best = result = udp_port_rover; + best = result = net_random() % (high - low) + low; for (i = 0; i < UDP_HTABLE_SIZE; i++, result++) { struct sock *sk; int size; @@ -132,7 +131,7 @@ static int udp_v6_get_port(struct sock *sk, unsigned short snum) break; } gotit: - udp_port_rover = snum = result; + snum = result; } else { struct sock *sk2; int addr_type = ipv6_addr_type(&sk->net_pinfo.af_inet6.rcv_saddr); -- cgit v1.2.3