diff options
author | WANG Cong <xiyou.wangcong@gmail.com> | 2014-05-12 19:04:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-14 15:31:45 -0400 |
commit | 122ff243f5f104194750ecbc76d5946dd1eec934 (patch) | |
tree | 189020a4d2404ef567785458fee38992e14ca97d /net/ipv4/sysctl_net_ipv4.c | |
parent | 9cc5e36d1c4794939deafd9f43bce2eab9c1142d (diff) |
ipv4: make ip_local_reserved_ports per netns
ip_local_port_range is already per netns, so should ip_local_reserved_ports
be. And since it is none by default we don't actually need it when we don't
enable CONFIG_SYSCTL.
By the way, rename inet_is_reserved_local_port() to inet_is_local_reserved_port()
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/sysctl_net_ipv4.c')
-rw-r--r-- | net/ipv4/sysctl_net_ipv4.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index a33b9fbc1d80..79a007c52558 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c | |||
@@ -437,13 +437,6 @@ static struct ctl_table ipv4_table[] = { | |||
437 | .proc_handler = proc_dointvec | 437 | .proc_handler = proc_dointvec |
438 | }, | 438 | }, |
439 | { | 439 | { |
440 | .procname = "ip_local_reserved_ports", | ||
441 | .data = NULL, /* initialized in sysctl_ipv4_init */ | ||
442 | .maxlen = 65536, | ||
443 | .mode = 0644, | ||
444 | .proc_handler = proc_do_large_bitmap, | ||
445 | }, | ||
446 | { | ||
447 | .procname = "igmp_max_memberships", | 440 | .procname = "igmp_max_memberships", |
448 | .data = &sysctl_igmp_max_memberships, | 441 | .data = &sysctl_igmp_max_memberships, |
449 | .maxlen = sizeof(int), | 442 | .maxlen = sizeof(int), |
@@ -825,6 +818,13 @@ static struct ctl_table ipv4_net_table[] = { | |||
825 | .proc_handler = ipv4_local_port_range, | 818 | .proc_handler = ipv4_local_port_range, |
826 | }, | 819 | }, |
827 | { | 820 | { |
821 | .procname = "ip_local_reserved_ports", | ||
822 | .data = &init_net.ipv4.sysctl_local_reserved_ports, | ||
823 | .maxlen = 65536, | ||
824 | .mode = 0644, | ||
825 | .proc_handler = proc_do_large_bitmap, | ||
826 | }, | ||
827 | { | ||
828 | .procname = "ip_no_pmtu_disc", | 828 | .procname = "ip_no_pmtu_disc", |
829 | .data = &init_net.ipv4.sysctl_ip_no_pmtu_disc, | 829 | .data = &init_net.ipv4.sysctl_ip_no_pmtu_disc, |
830 | .maxlen = sizeof(int), | 830 | .maxlen = sizeof(int), |
@@ -876,8 +876,14 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) | |||
876 | if (net->ipv4.ipv4_hdr == NULL) | 876 | if (net->ipv4.ipv4_hdr == NULL) |
877 | goto err_reg; | 877 | goto err_reg; |
878 | 878 | ||
879 | net->ipv4.sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL); | ||
880 | if (!net->ipv4.sysctl_local_reserved_ports) | ||
881 | goto err_ports; | ||
882 | |||
879 | return 0; | 883 | return 0; |
880 | 884 | ||
885 | err_ports: | ||
886 | unregister_net_sysctl_table(net->ipv4.ipv4_hdr); | ||
881 | err_reg: | 887 | err_reg: |
882 | if (!net_eq(net, &init_net)) | 888 | if (!net_eq(net, &init_net)) |
883 | kfree(table); | 889 | kfree(table); |
@@ -889,6 +895,7 @@ static __net_exit void ipv4_sysctl_exit_net(struct net *net) | |||
889 | { | 895 | { |
890 | struct ctl_table *table; | 896 | struct ctl_table *table; |
891 | 897 | ||
898 | kfree(net->ipv4.sysctl_local_reserved_ports); | ||
892 | table = net->ipv4.ipv4_hdr->ctl_table_arg; | 899 | table = net->ipv4.ipv4_hdr->ctl_table_arg; |
893 | unregister_net_sysctl_table(net->ipv4.ipv4_hdr); | 900 | unregister_net_sysctl_table(net->ipv4.ipv4_hdr); |
894 | kfree(table); | 901 | kfree(table); |
@@ -902,16 +909,6 @@ static __net_initdata struct pernet_operations ipv4_sysctl_ops = { | |||
902 | static __init int sysctl_ipv4_init(void) | 909 | static __init int sysctl_ipv4_init(void) |
903 | { | 910 | { |
904 | struct ctl_table_header *hdr; | 911 | struct ctl_table_header *hdr; |
905 | struct ctl_table *i; | ||
906 | |||
907 | for (i = ipv4_table; i->procname; i++) { | ||
908 | if (strcmp(i->procname, "ip_local_reserved_ports") == 0) { | ||
909 | i->data = sysctl_local_reserved_ports; | ||
910 | break; | ||
911 | } | ||
912 | } | ||
913 | if (!i->procname) | ||
914 | return -EINVAL; | ||
915 | 912 | ||
916 | hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table); | 913 | hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table); |
917 | if (hdr == NULL) | 914 | if (hdr == NULL) |