Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Eric W. Biederman and committed by
David S. Miller
c027aab4 276996fd

+1 -22
-8
net/ipv4/devinet.c
··· 1821 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 1824 snprintf(path, sizeof(path), "net/ipv4/conf/%s", dev_name); 1829 1825 1830 1826 t->sysctl_header = register_net_sysctl(net, path, t->devinet_vars); ··· 1906 1910 tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1]; 1907 1911 tbl[0].extra1 = all; 1908 1912 tbl[0].extra2 = net; 1909 - 1910 - /* Don't export sysctls to unprivileged users */ 1911 - if (net->user_ns != &init_user_ns) 1912 - tbl[0].procname = NULL; 1913 1913 #endif 1914 1914 } 1915 1915
-4
net/ipv6/addrconf.c
··· 4741 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 4744 snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name); 4749 4745 4750 4746 t->sysctl_header = register_net_sysctl(net, path, t->addrconf_vars);
+1 -6
net/ipv6/icmp.c
··· 967 967 sizeof(ipv6_icmp_table_template), 968 968 GFP_KERNEL); 969 969 970 - if (table) { 970 + if (table) 971 971 table[0].data = &net->ipv6.sysctl.icmpv6_time; 972 - 973 - /* Don't export sysctls to unprivileged users */ 974 - if (net->user_ns != &init_user_ns) 975 - table[0].procname = NULL; 976 - } 977 972 978 973 return table; 979 974 }
-4
net/ipv6/sysctl_net_ipv6.c
··· 52 52 goto out; 53 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 55 ipv6_route_table = ipv6_route_sysctl_init(net); 60 56 if (!ipv6_route_table) 61 57 goto out_ipv6_table;