aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2012-11-15 22:03:10 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-18 20:33:00 -0500
commitc027aab4a6b1fe2541090ac04bee8ad246aeef70 (patch)
treee53b0a69cba2bd4476812f06e97986bcdfb0195c
parent276996fda0f33bd5e5e028c426f852ecd119372b (diff)
net: Enable some sysctls that are safe for the userns root
- Enable the per device ipv4 sysctls: net/ipv4/conf/<if>/forwarding net/ipv4/conf/<if>/mc_forwarding net/ipv4/conf/<if>/accept_redirects net/ipv4/conf/<if>/secure_redirects net/ipv4/conf/<if>/shared_media net/ipv4/conf/<if>/rp_filter net/ipv4/conf/<if>/send_redirects net/ipv4/conf/<if>/accept_source_route net/ipv4/conf/<if>/accept_local net/ipv4/conf/<if>/src_valid_mark net/ipv4/conf/<if>/proxy_arp net/ipv4/conf/<if>/medium_id net/ipv4/conf/<if>/bootp_relay net/ipv4/conf/<if>/log_martians net/ipv4/conf/<if>/tag net/ipv4/conf/<if>/arp_filter net/ipv4/conf/<if>/arp_announce net/ipv4/conf/<if>/arp_ignore net/ipv4/conf/<if>/arp_accept net/ipv4/conf/<if>/arp_notify net/ipv4/conf/<if>/proxy_arp_pvlan net/ipv4/conf/<if>/disable_xfrm net/ipv4/conf/<if>/disable_policy net/ipv4/conf/<if>/force_igmp_version net/ipv4/conf/<if>/promote_secondaries net/ipv4/conf/<if>/route_localnet - Enable the global ipv4 sysctl: net/ipv4/ip_forward - Enable the per device ipv6 sysctls: net/ipv6/conf/<if>/forwarding net/ipv6/conf/<if>/hop_limit net/ipv6/conf/<if>/mtu net/ipv6/conf/<if>/accept_ra net/ipv6/conf/<if>/accept_redirects net/ipv6/conf/<if>/autoconf net/ipv6/conf/<if>/dad_transmits net/ipv6/conf/<if>/router_solicitations net/ipv6/conf/<if>/router_solicitation_interval net/ipv6/conf/<if>/router_solicitation_delay net/ipv6/conf/<if>/force_mld_version net/ipv6/conf/<if>/use_tempaddr net/ipv6/conf/<if>/temp_valid_lft net/ipv6/conf/<if>/temp_prefered_lft net/ipv6/conf/<if>/regen_max_retry net/ipv6/conf/<if>/max_desync_factor net/ipv6/conf/<if>/max_addresses net/ipv6/conf/<if>/accept_ra_defrtr net/ipv6/conf/<if>/accept_ra_pinfo net/ipv6/conf/<if>/accept_ra_rtr_pref net/ipv6/conf/<if>/router_probe_interval net/ipv6/conf/<if>/accept_ra_rt_info_max_plen net/ipv6/conf/<if>/proxy_ndp net/ipv6/conf/<if>/accept_source_route net/ipv6/conf/<if>/optimistic_dad net/ipv6/conf/<if>/mc_forwarding net/ipv6/conf/<if>/disable_ipv6 net/ipv6/conf/<if>/accept_dad net/ipv6/conf/<if>/force_tllao - Enable the global ipv6 sysctls: net/ipv6/bindv6only net/ipv6/icmp/ratelimit Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/devinet.c8
-rw-r--r--net/ipv6/addrconf.c4
-rw-r--r--net/ipv6/icmp.c7
-rw-r--r--net/ipv6/sysctl_net_ipv6.c4
4 files changed, 1 insertions, 22 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 259622a5e690..298c1c279739 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1821,10 +1821,6 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,
1821 t->devinet_vars[i].extra2 = net; 1821 t->devinet_vars[i].extra2 = net;
1822 } 1822 }
1823 1823
1824 /* Don't export sysctls to unprivileged users */
1825 if (net->user_ns != &init_user_ns)
1826 t->devinet_vars[0].procname = NULL;
1827
1828 snprintf(path, sizeof(path), "net/ipv4/conf/%s", dev_name); 1824 snprintf(path, sizeof(path), "net/ipv4/conf/%s", dev_name);
1829 1825
1830 t->sysctl_header = register_net_sysctl(net, path, t->devinet_vars); 1826 t->sysctl_header = register_net_sysctl(net, path, t->devinet_vars);
@@ -1910,10 +1906,6 @@ static __net_init int devinet_init_net(struct net *net)
1910 tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1]; 1906 tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1];
1911 tbl[0].extra1 = all; 1907 tbl[0].extra1 = all;
1912 tbl[0].extra2 = net; 1908 tbl[0].extra2 = net;
1913
1914 /* Don't export sysctls to unprivileged users */
1915 if (net->user_ns != &init_user_ns)
1916 tbl[0].procname = NULL;
1917#endif 1909#endif
1918 } 1910 }
1919 1911
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 67ac9f8d1976..d39fe490da08 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -4741,10 +4741,6 @@ static int __addrconf_sysctl_register(struct net *net, char *dev_name,
4741 t->addrconf_vars[i].extra2 = net; 4741 t->addrconf_vars[i].extra2 = net;
4742 } 4742 }
4743 4743
4744 /* Don't export sysctls to unprivileged users */
4745 if (net->user_ns != &init_user_ns)
4746 t->addrconf_vars[0].procname = NULL;
4747
4748 snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name); 4744 snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name);
4749 4745
4750 t->sysctl_header = register_net_sysctl(net, path, t->addrconf_vars); 4746 t->sysctl_header = register_net_sysctl(net, path, t->addrconf_vars);
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index d77dc1e2a42b..b4a9fd51dae7 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -967,14 +967,9 @@ struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
967 sizeof(ipv6_icmp_table_template), 967 sizeof(ipv6_icmp_table_template),
968 GFP_KERNEL); 968 GFP_KERNEL);
969 969
970 if (table) { 970 if (table)
971 table[0].data = &net->ipv6.sysctl.icmpv6_time; 971 table[0].data = &net->ipv6.sysctl.icmpv6_time;
972 972
973 /* Don't export sysctls to unprivileged users */
974 if (net->user_ns != &init_user_ns)
975 table[0].procname = NULL;
976 }
977
978 return table; 973 return table;
979} 974}
980#endif 975#endif
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
index b06fd078e6c7..e85c48bd404f 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
@@ -52,10 +52,6 @@ static int __net_init ipv6_sysctl_net_init(struct net *net)
52 goto out; 52 goto out;
53 ipv6_table[0].data = &net->ipv6.sysctl.bindv6only; 53 ipv6_table[0].data = &net->ipv6.sysctl.bindv6only;
54 54
55 /* Don't export sysctls to unprivileged users */
56 if (net->user_ns != &init_user_ns)
57 ipv6_table[0].procname = NULL;
58
59 ipv6_route_table = ipv6_route_sysctl_init(net); 55 ipv6_route_table = ipv6_route_sysctl_init(net);
60 if (!ipv6_route_table) 56 if (!ipv6_route_table)
61 goto out_ipv6_table; 57 goto out_ipv6_table;