From 64e52659970567ed9fa5802ca4acb514b187ba3f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Sat, 30 Jul 2011 22:44:42 +0800 Subject: [PATCH] Revert "net: Replace AID_NET_RAW checks with capable(CAP_NET_RAW)." This reverts commit f9193a728ae53bf17792f3eebad07f89c2166c73. --- net/ipv4/af_inet.c | 34 +++++++++++++++++++++++----------- net/ipv6/af_inet6.c | 35 ++++++++++++++++++++++++----------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 58525bd72506..941d9752a3c1 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -118,16 +118,6 @@ #ifdef CONFIG_ANDROID_PARANOID_NETWORK #include - -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 @@ -271,6 +261,28 @@ static inline int inet_netns_ok(struct net *net, int protocol) return ipprot->netns_ok; } +#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(int cap) +{ + if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW)) + return 1; + return capable(cap); +} +# else +static inline int current_has_network(void) +{ + return 1; +} +static inline int current_has_cap(int cap) +{ + return capable(cap); +} +#endif /* * Create an inet socket. @@ -342,7 +354,7 @@ lookup_protocol: } err = -EPERM; - if (answer->capability > 0 && !capable(answer->capability)) + if (answer->capability > 0 && !current_has_cap(answer->capability)) goto out_rcu_unlock; err = -EAFNOSUPPORT; diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 2f7c3bf90e83..0a883bf68ceb 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -64,16 +64,6 @@ #ifdef CONFIG_ANDROID_PARANOID_NETWORK #include - -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"); @@ -109,6 +99,29 @@ 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(int cap) +{ + if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW)) + return 1; + return capable(cap); +} +# else +static inline int current_has_network(void) +{ + return 1; +} +static inline int current_has_cap(int cap) +{ + return capable(cap); +} +#endif + static int inet6_create(struct net *net, struct socket *sock, int protocol) { struct inet_sock *inet; @@ -175,7 +188,7 @@ lookup_protocol: } err = -EPERM; - if (answer->capability > 0 && !capable(answer->capability)) + if (answer->capability > 0 && !current_has_cap(answer->capability)) goto out_rcu_unlock; sock->ops = answer->ops; -- 2.34.1