net: reserve ports for applications using fixed port numbers
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / ipv4 / inet_connection_sock.c
index e0a3e3537b147fd263611f4109da28f3157ae60c..70eb3507c40645a028d0ecd0421911f10f0a541d 100644 (file)
@@ -37,6 +37,9 @@ struct local_ports sysctl_local_ports __read_mostly = {
        .range = { 32768, 61000 },
 };
 
+unsigned long *sysctl_local_reserved_ports;
+EXPORT_SYMBOL(sysctl_local_reserved_ports);
+
 void inet_get_local_port_range(int *low, int *high)
 {
        unsigned seq;
@@ -108,6 +111,8 @@ again:
 
                smallest_size = -1;
                do {
+                       if (inet_is_reserved_local_port(rover))
+                               goto next_nolock;
                        head = &hashinfo->bhash[inet_bhashfn(net, rover,
                                        hashinfo->bhash_size)];
                        spin_lock(&head->lock);
@@ -130,6 +135,7 @@ again:
                        break;
                next:
                        spin_unlock(&head->lock);
+               next_nolock:
                        if (++rover > high)
                                rover = low;
                } while (--remaining > 0);