Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a3db02c authored by Chia-chi Yeh's avatar Chia-chi Yeh Committed by Ruchi Kandoi
Browse files

net: Replace AID_NET_RAW checks with capable(CAP_NET_RAW).

parent 7985836f
Loading
Loading
Loading
Loading
+11 −25
Original line number Diff line number Diff line
@@ -121,6 +121,16 @@

#ifdef CONFIG_ANDROID_PARANOID_NETWORK
#include <linux/android_aid.h>

static inline int current_has_network(void)
{
	return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);
}
#else
static inline int current_has_network(void)
{
	return 1;
}
#endif

/* The inetsw table contains everything that inet_create needs to
@@ -245,29 +255,6 @@ out:
}
EXPORT_SYMBOL(inet_listen);

#ifdef CONFIG_ANDROID_PARANOID_NETWORK
static inline int current_has_network(void)
{
	return (!current_euid() || in_egroup_p(AID_INET) ||
		in_egroup_p(AID_NET_RAW));
}
static inline int current_has_cap(struct net *net, int cap)
{
	if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))
		return 1;
	return ns_capable(net->user_ns, cap);
}
# else
static inline int current_has_network(void)
{
	return 1;
}
static inline int current_has_cap(struct net *net, int cap)
{
	return ns_capable(net->user_ns, cap);
}
#endif

/*
 *	Create an inet socket.
 */
@@ -334,8 +321,7 @@ lookup_protocol:
	}

	err = -EPERM;
	if (sock->type == SOCK_RAW && !kern &&
	    !current_has_cap(net, CAP_NET_RAW))
	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
		goto out_rcu_unlock;

	sock->ops = answer->ops;
+11 −25
Original line number Diff line number Diff line
@@ -66,6 +66,16 @@

#ifdef CONFIG_ANDROID_PARANOID_NETWORK
#include <linux/android_aid.h>

static inline int current_has_network(void)
{
	return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);
}
#else
static inline int current_has_network(void)
{
	return 1;
}
#endif

MODULE_AUTHOR("Cast of dozens");
@@ -101,29 +111,6 @@ static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
	return (struct ipv6_pinfo *)(((u8 *)sk) + offset);
}

#ifdef CONFIG_ANDROID_PARANOID_NETWORK
static inline int current_has_network(void)
{
	return (!current_euid() || in_egroup_p(AID_INET) ||
		in_egroup_p(AID_NET_RAW));
}
static inline int current_has_cap(struct net *net, int cap)
{
	if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))
		return 1;
	return ns_capable(net->user_ns, cap);
}
# else
static inline int current_has_network(void)
{
	return 1;
}
static inline int current_has_cap(struct net *net, int cap)
{
	return ns_capable(net->user_ns, cap);
}
#endif

static int inet6_create(struct net *net, struct socket *sock, int protocol,
			int kern)
{
@@ -185,8 +172,7 @@ lookup_protocol:
	}

	err = -EPERM;
	if (sock->type == SOCK_RAW && !kern &&
	    !current_has_cap(net, CAP_NET_RAW))
	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
		goto out_rcu_unlock;

	sock->ops = answer->ops;