diff options
Diffstat (limited to 'net/ipv4')
| -rw-r--r-- | net/ipv4/af_inet.c | 3 | ||||
| -rw-r--r-- | net/ipv4/arp.c | 2 | ||||
| -rw-r--r-- | net/ipv4/devinet.c | 4 | ||||
| -rw-r--r-- | net/ipv4/fib_frontend.c | 2 | ||||
| -rw-r--r-- | net/ipv4/ip_gre.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ip_options.c | 6 | ||||
| -rw-r--r-- | net/ipv4/ip_sockglue.c | 5 | ||||
| -rw-r--r-- | net/ipv4/ip_vti.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ipip.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ipmr.c | 2 | ||||
| -rw-r--r-- | net/ipv4/netfilter/arp_tables.c | 8 | ||||
| -rw-r--r-- | net/ipv4/netfilter/ip_tables.c | 8 | ||||
| -rw-r--r-- | net/ipv4/tcp.c | 2 | ||||
| -rw-r--r-- | net/ipv4/tcp_cong.c | 3 | 
14 files changed, 30 insertions, 27 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index d5e5a054123..4f5f22061e1 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -346,7 +346,8 @@ lookup_protocol:  	}  	err = -EPERM; -	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW)) +	if (sock->type == SOCK_RAW && !kern && +	    !ns_capable(net->user_ns, CAP_NET_RAW))  		goto out_rcu_unlock;  	err = -EAFNOSUPPORT; diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 47800459e4c..ce6fbdfd40b 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -1161,7 +1161,7 @@ int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)  	switch (cmd) {  	case SIOCDARP:  	case SIOCSARP: -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			return -EPERM;  	case SIOCGARP:  		err = copy_from_user(&r, arg, sizeof(struct arpreq)); diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 41709353891..259622a5e69 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -730,7 +730,7 @@ int devinet_ioctl(struct net *net, unsigned int cmd, void __user *arg)  	case SIOCSIFFLAGS:  		ret = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto out;  		break;  	case SIOCSIFADDR:	/* Set interface address (and family) */ @@ -738,7 +738,7 @@ int devinet_ioctl(struct net *net, unsigned int cmd, void __user *arg)  	case SIOCSIFDSTADDR:	/* Set the destination address */  	case SIOCSIFNETMASK: 	/* Set the netmask for the interface */  		ret = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto out;  		ret = -EINVAL;  		if (sin->sin_family != AF_INET) diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index bce4541c678..784716a677c 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -488,7 +488,7 @@ int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg)  	switch (cmd) {  	case SIOCADDRT:		/* Add a route */  	case SIOCDELRT:		/* Delete a route */ -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			return -EPERM;  		if (copy_from_user(&rt, arg, sizeof(rt))) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 127f2a1e67f..a85ae2f7a21 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -1064,7 +1064,7 @@ ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCADDTUNNEL:  	case SIOCCHGTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		err = -EFAULT; @@ -1139,7 +1139,7 @@ ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCDELTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		if (dev == ign->fb_tunnel_dev) { diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c index 1dc01f9793d..f6289bf6f33 100644 --- a/net/ipv4/ip_options.c +++ b/net/ipv4/ip_options.c @@ -409,7 +409,7 @@ int ip_options_compile(struct net *net,  					optptr[2] += 8;  					break;  				      default: -					if (!skb && !capable(CAP_NET_RAW)) { +					if (!skb && !ns_capable(net->user_ns, CAP_NET_RAW)) {  						pp_ptr = optptr + 3;  						goto error;  					} @@ -445,7 +445,7 @@ int ip_options_compile(struct net *net,  				opt->router_alert = optptr - iph;  			break;  		      case IPOPT_CIPSO: -			if ((!skb && !capable(CAP_NET_RAW)) || opt->cipso) { +			if ((!skb && !ns_capable(net->user_ns, CAP_NET_RAW)) || opt->cipso) {  				pp_ptr = optptr;  				goto error;  			} @@ -458,7 +458,7 @@ int ip_options_compile(struct net *net,  		      case IPOPT_SEC:  		      case IPOPT_SID:  		      default: -			if (!skb && !capable(CAP_NET_RAW)) { +			if (!skb && !ns_capable(net->user_ns, CAP_NET_RAW)) {  				pp_ptr = optptr;  				goto error;  			} diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 14bbfcf717a..3c9d2088028 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -989,13 +989,14 @@ mc_msf_out:  	case IP_IPSEC_POLICY:  	case IP_XFRM_POLICY:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  			break;  		err = xfrm_user_policy(sk, optname, optval, optlen);  		break;  	case IP_TRANSPARENT: -		if (!!val && !capable(CAP_NET_RAW) && !capable(CAP_NET_ADMIN)) { +		if (!!val && !ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) && +		    !ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {  			err = -EPERM;  			break;  		} diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index f4a825d3bd7..c3a4233c0ac 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -488,7 +488,7 @@ vti_tunnel_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCADDTUNNEL:  	case SIOCCHGTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		err = -EFAULT; @@ -553,7 +553,7 @@ vti_tunnel_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCDELTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		if (dev == ipn->fb_tunnel_dev) { diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index c26c1717c1d..191fc24a745 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -691,7 +691,7 @@ ipip_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCADDTUNNEL:  	case SIOCCHGTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		err = -EFAULT; @@ -735,7 +735,7 @@ ipip_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)  	case SIOCDELTUNNEL:  		err = -EPERM; -		if (!capable(CAP_NET_ADMIN)) +		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))  			goto done;  		if (dev == ipn->fb_tunnel_dev) { diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 6168c4dc58b..adf3d349566 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -1213,7 +1213,7 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi  	if (optname != MRT_INIT) {  		if (sk != rcu_access_pointer(mrt->mroute_sk) && -		    !capable(CAP_NET_ADMIN)) +		    !ns_capable(net->user_ns, CAP_NET_ADMIN))  			return -EACCES;  	} diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index 97e61eadf58..3ea4127404d 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c @@ -1533,7 +1533,7 @@ static int compat_do_arpt_set_ctl(struct sock *sk, int cmd, void __user *user,  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -1677,7 +1677,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user,  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -1698,7 +1698,7 @@ static int do_arpt_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -1722,7 +1722,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index 170b1fdd6b7..17c5e06da66 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c @@ -1846,7 +1846,7 @@ compat_do_ipt_set_ctl(struct sock *sk,	int cmd, void __user *user,  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -1961,7 +1961,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -1983,7 +1983,7 @@ do_ipt_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { @@ -2008,7 +2008,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)  {  	int ret; -	if (!capable(CAP_NET_ADMIN)) +	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))  		return -EPERM;  	switch (cmd) { diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 4aefa0b42c2..e6eace1c2bd 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2304,7 +2304,7 @@ void tcp_sock_destruct(struct sock *sk)  static inline bool tcp_can_repair_sock(const struct sock *sk)  { -	return capable(CAP_NET_ADMIN) && +	return ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN) &&  		((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_ESTABLISHED));  } diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 1432cdb0644..baf28611b33 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -259,7 +259,8 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)  	if (!ca)  		err = -ENOENT; -	else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || capable(CAP_NET_ADMIN))) +	else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || +		   ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)))  		err = -EPERM;  	else if (!try_module_get(ca->owner))  |