#include <asm/system.h>
#include <linux/mroute6.h>
-#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");
MODULE_DESCRIPTION("IPv6 protocol stack for Linux");
MODULE_LICENSE("GPL");
int try_loading_module = 0;
int err;
- if (!current_has_network())
- return -EACCES;
-
if (sock->type != SOCK_RAW &&
sock->type != SOCK_DGRAM &&
!inet_ehash_secret)
EXPORT_SYMBOL(inet6_getname);
-int inet6_killaddr_ioctl(struct net *net, void __user *arg) {
- struct in6_ifreq ireq;
- struct sockaddr_in6 sin6;
-
- if (!capable(CAP_NET_ADMIN))
- return -EACCES;
-
- if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
- return -EFAULT;
-
- sin6.sin6_family = AF_INET6;
- ipv6_addr_copy(&sin6.sin6_addr, &ireq.ifr6_addr);
- return tcp_nuke_addr(net, (struct sockaddr *) &sin6);
-}
-
int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
struct sock *sk = sock->sk;
return addrconf_del_ifaddr(net, (void __user *) arg);
case SIOCSIFDSTADDR:
return addrconf_set_dstaddr(net, (void __user *) arg);
- case SIOCKILLADDR:
- return inet6_killaddr_ioctl(net, (void __user *) arg);
default:
if (!sk->sk_prot->ioctl)
return -ENOIOCTLCMD;