cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

af_inet6.c (32070B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *	PF_INET6 socket protocol family
      4 *	Linux INET6 implementation
      5 *
      6 *	Authors:
      7 *	Pedro Roque		<roque@di.fc.ul.pt>
      8 *
      9 *	Adapted from linux/net/ipv4/af_inet.c
     10 *
     11 *	Fixes:
     12 *	piggy, Karl Knutson	:	Socket protocol table
     13 *	Hideaki YOSHIFUJI	:	sin6_scope_id support
     14 *	Arnaldo Melo		:	check proc_net_create return, cleanups
     15 */
     16
     17#define pr_fmt(fmt) "IPv6: " fmt
     18
     19#include <linux/module.h>
     20#include <linux/capability.h>
     21#include <linux/errno.h>
     22#include <linux/types.h>
     23#include <linux/socket.h>
     24#include <linux/in.h>
     25#include <linux/kernel.h>
     26#include <linux/timer.h>
     27#include <linux/string.h>
     28#include <linux/sockios.h>
     29#include <linux/net.h>
     30#include <linux/fcntl.h>
     31#include <linux/mm.h>
     32#include <linux/interrupt.h>
     33#include <linux/proc_fs.h>
     34#include <linux/stat.h>
     35#include <linux/init.h>
     36#include <linux/slab.h>
     37
     38#include <linux/inet.h>
     39#include <linux/netdevice.h>
     40#include <linux/icmpv6.h>
     41#include <linux/netfilter_ipv6.h>
     42
     43#include <net/ip.h>
     44#include <net/ipv6.h>
     45#include <net/udp.h>
     46#include <net/udplite.h>
     47#include <net/tcp.h>
     48#include <net/ping.h>
     49#include <net/protocol.h>
     50#include <net/inet_common.h>
     51#include <net/route.h>
     52#include <net/transp_v6.h>
     53#include <net/ip6_route.h>
     54#include <net/addrconf.h>
     55#include <net/ipv6_stubs.h>
     56#include <net/ndisc.h>
     57#ifdef CONFIG_IPV6_TUNNEL
     58#include <net/ip6_tunnel.h>
     59#endif
     60#include <net/calipso.h>
     61#include <net/seg6.h>
     62#include <net/rpl.h>
     63#include <net/compat.h>
     64#include <net/xfrm.h>
     65#include <net/ioam6.h>
     66
     67#include <linux/uaccess.h>
     68#include <linux/mroute6.h>
     69
     70#include "ip6_offload.h"
     71
     72MODULE_AUTHOR("Cast of dozens");
     73MODULE_DESCRIPTION("IPv6 protocol stack for Linux");
     74MODULE_LICENSE("GPL");
     75
     76/* The inetsw6 table contains everything that inet6_create needs to
     77 * build a new socket.
     78 */
     79static struct list_head inetsw6[SOCK_MAX];
     80static DEFINE_SPINLOCK(inetsw6_lock);
     81
     82struct ipv6_params ipv6_defaults = {
     83	.disable_ipv6 = 0,
     84	.autoconf = 1,
     85};
     86
     87static int disable_ipv6_mod;
     88
     89module_param_named(disable, disable_ipv6_mod, int, 0444);
     90MODULE_PARM_DESC(disable, "Disable IPv6 module such that it is non-functional");
     91
     92module_param_named(disable_ipv6, ipv6_defaults.disable_ipv6, int, 0444);
     93MODULE_PARM_DESC(disable_ipv6, "Disable IPv6 on all interfaces");
     94
     95module_param_named(autoconf, ipv6_defaults.autoconf, int, 0444);
     96MODULE_PARM_DESC(autoconf, "Enable IPv6 address autoconfiguration on all interfaces");
     97
     98bool ipv6_mod_enabled(void)
     99{
    100	return disable_ipv6_mod == 0;
    101}
    102EXPORT_SYMBOL_GPL(ipv6_mod_enabled);
    103
    104static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
    105{
    106	const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo);
    107
    108	return (struct ipv6_pinfo *)(((u8 *)sk) + offset);
    109}
    110
    111static int inet6_create(struct net *net, struct socket *sock, int protocol,
    112			int kern)
    113{
    114	struct inet_sock *inet;
    115	struct ipv6_pinfo *np;
    116	struct sock *sk;
    117	struct inet_protosw *answer;
    118	struct proto *answer_prot;
    119	unsigned char answer_flags;
    120	int try_loading_module = 0;
    121	int err;
    122
    123	if (protocol < 0 || protocol >= IPPROTO_MAX)
    124		return -EINVAL;
    125
    126	/* Look for the requested type/protocol pair. */
    127lookup_protocol:
    128	err = -ESOCKTNOSUPPORT;
    129	rcu_read_lock();
    130	list_for_each_entry_rcu(answer, &inetsw6[sock->type], list) {
    131
    132		err = 0;
    133		/* Check the non-wild match. */
    134		if (protocol == answer->protocol) {
    135			if (protocol != IPPROTO_IP)
    136				break;
    137		} else {
    138			/* Check for the two wild cases. */
    139			if (IPPROTO_IP == protocol) {
    140				protocol = answer->protocol;
    141				break;
    142			}
    143			if (IPPROTO_IP == answer->protocol)
    144				break;
    145		}
    146		err = -EPROTONOSUPPORT;
    147	}
    148
    149	if (err) {
    150		if (try_loading_module < 2) {
    151			rcu_read_unlock();
    152			/*
    153			 * Be more specific, e.g. net-pf-10-proto-132-type-1
    154			 * (net-pf-PF_INET6-proto-IPPROTO_SCTP-type-SOCK_STREAM)
    155			 */
    156			if (++try_loading_module == 1)
    157				request_module("net-pf-%d-proto-%d-type-%d",
    158						PF_INET6, protocol, sock->type);
    159			/*
    160			 * Fall back to generic, e.g. net-pf-10-proto-132
    161			 * (net-pf-PF_INET6-proto-IPPROTO_SCTP)
    162			 */
    163			else
    164				request_module("net-pf-%d-proto-%d",
    165						PF_INET6, protocol);
    166			goto lookup_protocol;
    167		} else
    168			goto out_rcu_unlock;
    169	}
    170
    171	err = -EPERM;
    172	if (sock->type == SOCK_RAW && !kern &&
    173	    !ns_capable(net->user_ns, CAP_NET_RAW))
    174		goto out_rcu_unlock;
    175
    176	sock->ops = answer->ops;
    177	answer_prot = answer->prot;
    178	answer_flags = answer->flags;
    179	rcu_read_unlock();
    180
    181	WARN_ON(!answer_prot->slab);
    182
    183	err = -ENOBUFS;
    184	sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot, kern);
    185	if (!sk)
    186		goto out;
    187
    188	sock_init_data(sock, sk);
    189
    190	err = 0;
    191	if (INET_PROTOSW_REUSE & answer_flags)
    192		sk->sk_reuse = SK_CAN_REUSE;
    193
    194	inet = inet_sk(sk);
    195	inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
    196
    197	if (SOCK_RAW == sock->type) {
    198		inet->inet_num = protocol;
    199		if (IPPROTO_RAW == protocol)
    200			inet->hdrincl = 1;
    201	}
    202
    203	sk->sk_destruct		= inet_sock_destruct;
    204	sk->sk_family		= PF_INET6;
    205	sk->sk_protocol		= protocol;
    206
    207	sk->sk_backlog_rcv	= answer->prot->backlog_rcv;
    208
    209	inet_sk(sk)->pinet6 = np = inet6_sk_generic(sk);
    210	np->hop_limit	= -1;
    211	np->mcast_hops	= IPV6_DEFAULT_MCASTHOPS;
    212	np->mc_loop	= 1;
    213	np->mc_all	= 1;
    214	np->pmtudisc	= IPV6_PMTUDISC_WANT;
    215	np->repflow	= net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_ESTABLISHED;
    216	sk->sk_ipv6only	= net->ipv6.sysctl.bindv6only;
    217
    218	/* Init the ipv4 part of the socket since we can have sockets
    219	 * using v6 API for ipv4.
    220	 */
    221	inet->uc_ttl	= -1;
    222
    223	inet->mc_loop	= 1;
    224	inet->mc_ttl	= 1;
    225	inet->mc_index	= 0;
    226	RCU_INIT_POINTER(inet->mc_list, NULL);
    227	inet->rcv_tos	= 0;
    228
    229	if (net->ipv4.sysctl_ip_no_pmtu_disc)
    230		inet->pmtudisc = IP_PMTUDISC_DONT;
    231	else
    232		inet->pmtudisc = IP_PMTUDISC_WANT;
    233	/*
    234	 * Increment only the relevant sk_prot->socks debug field, this changes
    235	 * the previous behaviour of incrementing both the equivalent to
    236	 * answer->prot->socks (inet6_sock_nr) and inet_sock_nr.
    237	 *
    238	 * This allows better debug granularity as we'll know exactly how many
    239	 * UDPv6, TCPv6, etc socks were allocated, not the sum of all IPv6
    240	 * transport protocol socks. -acme
    241	 */
    242	sk_refcnt_debug_inc(sk);
    243
    244	if (inet->inet_num) {
    245		/* It assumes that any protocol which allows
    246		 * the user to assign a number at socket
    247		 * creation time automatically shares.
    248		 */
    249		inet->inet_sport = htons(inet->inet_num);
    250		err = sk->sk_prot->hash(sk);
    251		if (err) {
    252			sk_common_release(sk);
    253			goto out;
    254		}
    255	}
    256	if (sk->sk_prot->init) {
    257		err = sk->sk_prot->init(sk);
    258		if (err) {
    259			sk_common_release(sk);
    260			goto out;
    261		}
    262	}
    263
    264	if (!kern) {
    265		err = BPF_CGROUP_RUN_PROG_INET_SOCK(sk);
    266		if (err) {
    267			sk_common_release(sk);
    268			goto out;
    269		}
    270	}
    271out:
    272	return err;
    273out_rcu_unlock:
    274	rcu_read_unlock();
    275	goto out;
    276}
    277
    278static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
    279			u32 flags)
    280{
    281	struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr;
    282	struct inet_sock *inet = inet_sk(sk);
    283	struct ipv6_pinfo *np = inet6_sk(sk);
    284	struct net *net = sock_net(sk);
    285	__be32 v4addr = 0;
    286	unsigned short snum;
    287	bool saved_ipv6only;
    288	int addr_type = 0;
    289	int err = 0;
    290
    291	if (addr->sin6_family != AF_INET6)
    292		return -EAFNOSUPPORT;
    293
    294	addr_type = ipv6_addr_type(&addr->sin6_addr);
    295	if ((addr_type & IPV6_ADDR_MULTICAST) && sk->sk_type == SOCK_STREAM)
    296		return -EINVAL;
    297
    298	snum = ntohs(addr->sin6_port);
    299	if (!(flags & BIND_NO_CAP_NET_BIND_SERVICE) &&
    300	    snum && inet_port_requires_bind_service(net, snum) &&
    301	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
    302		return -EACCES;
    303
    304	if (flags & BIND_WITH_LOCK)
    305		lock_sock(sk);
    306
    307	/* Check these errors (active socket, double bind). */
    308	if (sk->sk_state != TCP_CLOSE || inet->inet_num) {
    309		err = -EINVAL;
    310		goto out;
    311	}
    312
    313	/* Check if the address belongs to the host. */
    314	if (addr_type == IPV6_ADDR_MAPPED) {
    315		struct net_device *dev = NULL;
    316		int chk_addr_ret;
    317
    318		/* Binding to v4-mapped address on a v6-only socket
    319		 * makes no sense
    320		 */
    321		if (ipv6_only_sock(sk)) {
    322			err = -EINVAL;
    323			goto out;
    324		}
    325
    326		rcu_read_lock();
    327		if (sk->sk_bound_dev_if) {
    328			dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
    329			if (!dev) {
    330				err = -ENODEV;
    331				goto out_unlock;
    332			}
    333		}
    334
    335		/* Reproduce AF_INET checks to make the bindings consistent */
    336		v4addr = addr->sin6_addr.s6_addr32[3];
    337		chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr);
    338		rcu_read_unlock();
    339
    340		if (!inet_addr_valid_or_nonlocal(net, inet, v4addr,
    341						 chk_addr_ret)) {
    342			err = -EADDRNOTAVAIL;
    343			goto out;
    344		}
    345	} else {
    346		if (addr_type != IPV6_ADDR_ANY) {
    347			struct net_device *dev = NULL;
    348
    349			rcu_read_lock();
    350			if (__ipv6_addr_needs_scope_id(addr_type)) {
    351				if (addr_len >= sizeof(struct sockaddr_in6) &&
    352				    addr->sin6_scope_id) {
    353					/* Override any existing binding, if another one
    354					 * is supplied by user.
    355					 */
    356					sk->sk_bound_dev_if = addr->sin6_scope_id;
    357				}
    358
    359				/* Binding to link-local address requires an interface */
    360				if (!sk->sk_bound_dev_if) {
    361					err = -EINVAL;
    362					goto out_unlock;
    363				}
    364			}
    365
    366			if (sk->sk_bound_dev_if) {
    367				dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
    368				if (!dev) {
    369					err = -ENODEV;
    370					goto out_unlock;
    371				}
    372			}
    373
    374			/* ipv4 addr of the socket is invalid.  Only the
    375			 * unspecified and mapped address have a v4 equivalent.
    376			 */
    377			v4addr = LOOPBACK4_IPV6;
    378			if (!(addr_type & IPV6_ADDR_MULTICAST))	{
    379				if (!ipv6_can_nonlocal_bind(net, inet) &&
    380				    !ipv6_chk_addr(net, &addr->sin6_addr,
    381						   dev, 0)) {
    382					err = -EADDRNOTAVAIL;
    383					goto out_unlock;
    384				}
    385			}
    386			rcu_read_unlock();
    387		}
    388	}
    389
    390	inet->inet_rcv_saddr = v4addr;
    391	inet->inet_saddr = v4addr;
    392
    393	sk->sk_v6_rcv_saddr = addr->sin6_addr;
    394
    395	if (!(addr_type & IPV6_ADDR_MULTICAST))
    396		np->saddr = addr->sin6_addr;
    397
    398	saved_ipv6only = sk->sk_ipv6only;
    399	if (addr_type != IPV6_ADDR_ANY && addr_type != IPV6_ADDR_MAPPED)
    400		sk->sk_ipv6only = 1;
    401
    402	/* Make sure we are allowed to bind here. */
    403	if (snum || !(inet->bind_address_no_port ||
    404		      (flags & BIND_FORCE_ADDRESS_NO_PORT))) {
    405		if (sk->sk_prot->get_port(sk, snum)) {
    406			sk->sk_ipv6only = saved_ipv6only;
    407			inet_reset_saddr(sk);
    408			err = -EADDRINUSE;
    409			goto out;
    410		}
    411		if (!(flags & BIND_FROM_BPF)) {
    412			err = BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk);
    413			if (err) {
    414				sk->sk_ipv6only = saved_ipv6only;
    415				inet_reset_saddr(sk);
    416				if (sk->sk_prot->put_port)
    417					sk->sk_prot->put_port(sk);
    418				goto out;
    419			}
    420		}
    421	}
    422
    423	if (addr_type != IPV6_ADDR_ANY)
    424		sk->sk_userlocks |= SOCK_BINDADDR_LOCK;
    425	if (snum)
    426		sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
    427	inet->inet_sport = htons(inet->inet_num);
    428	inet->inet_dport = 0;
    429	inet->inet_daddr = 0;
    430out:
    431	if (flags & BIND_WITH_LOCK)
    432		release_sock(sk);
    433	return err;
    434out_unlock:
    435	rcu_read_unlock();
    436	goto out;
    437}
    438
    439/* bind for INET6 API */
    440int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
    441{
    442	struct sock *sk = sock->sk;
    443	u32 flags = BIND_WITH_LOCK;
    444	const struct proto *prot;
    445	int err = 0;
    446
    447	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
    448	prot = READ_ONCE(sk->sk_prot);
    449	/* If the socket has its own bind function then use it. */
    450	if (prot->bind)
    451		return prot->bind(sk, uaddr, addr_len);
    452
    453	if (addr_len < SIN6_LEN_RFC2133)
    454		return -EINVAL;
    455
    456	/* BPF prog is run before any checks are done so that if the prog
    457	 * changes context in a wrong way it will be caught.
    458	 */
    459	err = BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr,
    460						 CGROUP_INET6_BIND, &flags);
    461	if (err)
    462		return err;
    463
    464	return __inet6_bind(sk, uaddr, addr_len, flags);
    465}
    466EXPORT_SYMBOL(inet6_bind);
    467
    468int inet6_release(struct socket *sock)
    469{
    470	struct sock *sk = sock->sk;
    471
    472	if (!sk)
    473		return -EINVAL;
    474
    475	/* Free mc lists */
    476	ipv6_sock_mc_close(sk);
    477
    478	/* Free ac lists */
    479	ipv6_sock_ac_close(sk);
    480
    481	return inet_release(sock);
    482}
    483EXPORT_SYMBOL(inet6_release);
    484
    485void inet6_destroy_sock(struct sock *sk)
    486{
    487	struct ipv6_pinfo *np = inet6_sk(sk);
    488	struct sk_buff *skb;
    489	struct ipv6_txoptions *opt;
    490
    491	/* Release rx options */
    492
    493	skb = xchg(&np->pktoptions, NULL);
    494	kfree_skb(skb);
    495
    496	skb = xchg(&np->rxpmtu, NULL);
    497	kfree_skb(skb);
    498
    499	/* Free flowlabels */
    500	fl6_free_socklist(sk);
    501
    502	/* Free tx options */
    503
    504	opt = xchg((__force struct ipv6_txoptions **)&np->opt, NULL);
    505	if (opt) {
    506		atomic_sub(opt->tot_len, &sk->sk_omem_alloc);
    507		txopt_put(opt);
    508	}
    509}
    510EXPORT_SYMBOL_GPL(inet6_destroy_sock);
    511
    512/*
    513 *	This does both peername and sockname.
    514 */
    515int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
    516		  int peer)
    517{
    518	struct sockaddr_in6 *sin = (struct sockaddr_in6 *)uaddr;
    519	struct sock *sk = sock->sk;
    520	struct inet_sock *inet = inet_sk(sk);
    521	struct ipv6_pinfo *np = inet6_sk(sk);
    522
    523	sin->sin6_family = AF_INET6;
    524	sin->sin6_flowinfo = 0;
    525	sin->sin6_scope_id = 0;
    526	lock_sock(sk);
    527	if (peer) {
    528		if (!inet->inet_dport ||
    529		    (((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
    530		    peer == 1)) {
    531			release_sock(sk);
    532			return -ENOTCONN;
    533		}
    534		sin->sin6_port = inet->inet_dport;
    535		sin->sin6_addr = sk->sk_v6_daddr;
    536		if (np->sndflow)
    537			sin->sin6_flowinfo = np->flow_label;
    538		BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
    539				       CGROUP_INET6_GETPEERNAME);
    540	} else {
    541		if (ipv6_addr_any(&sk->sk_v6_rcv_saddr))
    542			sin->sin6_addr = np->saddr;
    543		else
    544			sin->sin6_addr = sk->sk_v6_rcv_saddr;
    545		sin->sin6_port = inet->inet_sport;
    546		BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
    547				       CGROUP_INET6_GETSOCKNAME);
    548	}
    549	sin->sin6_scope_id = ipv6_iface_scope_id(&sin->sin6_addr,
    550						 sk->sk_bound_dev_if);
    551	release_sock(sk);
    552	return sizeof(*sin);
    553}
    554EXPORT_SYMBOL(inet6_getname);
    555
    556int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
    557{
    558	void __user *argp = (void __user *)arg;
    559	struct sock *sk = sock->sk;
    560	struct net *net = sock_net(sk);
    561	const struct proto *prot;
    562
    563	switch (cmd) {
    564	case SIOCADDRT:
    565	case SIOCDELRT: {
    566		struct in6_rtmsg rtmsg;
    567
    568		if (copy_from_user(&rtmsg, argp, sizeof(rtmsg)))
    569			return -EFAULT;
    570		return ipv6_route_ioctl(net, cmd, &rtmsg);
    571	}
    572	case SIOCSIFADDR:
    573		return addrconf_add_ifaddr(net, argp);
    574	case SIOCDIFADDR:
    575		return addrconf_del_ifaddr(net, argp);
    576	case SIOCSIFDSTADDR:
    577		return addrconf_set_dstaddr(net, argp);
    578	default:
    579		/* IPV6_ADDRFORM can change sk->sk_prot under us. */
    580		prot = READ_ONCE(sk->sk_prot);
    581		if (!prot->ioctl)
    582			return -ENOIOCTLCMD;
    583		return prot->ioctl(sk, cmd, arg);
    584	}
    585	/*NOTREACHED*/
    586	return 0;
    587}
    588EXPORT_SYMBOL(inet6_ioctl);
    589
    590#ifdef CONFIG_COMPAT
    591struct compat_in6_rtmsg {
    592	struct in6_addr		rtmsg_dst;
    593	struct in6_addr		rtmsg_src;
    594	struct in6_addr		rtmsg_gateway;
    595	u32			rtmsg_type;
    596	u16			rtmsg_dst_len;
    597	u16			rtmsg_src_len;
    598	u32			rtmsg_metric;
    599	u32			rtmsg_info;
    600	u32			rtmsg_flags;
    601	s32			rtmsg_ifindex;
    602};
    603
    604static int inet6_compat_routing_ioctl(struct sock *sk, unsigned int cmd,
    605		struct compat_in6_rtmsg __user *ur)
    606{
    607	struct in6_rtmsg rt;
    608
    609	if (copy_from_user(&rt.rtmsg_dst, &ur->rtmsg_dst,
    610			3 * sizeof(struct in6_addr)) ||
    611	    get_user(rt.rtmsg_type, &ur->rtmsg_type) ||
    612	    get_user(rt.rtmsg_dst_len, &ur->rtmsg_dst_len) ||
    613	    get_user(rt.rtmsg_src_len, &ur->rtmsg_src_len) ||
    614	    get_user(rt.rtmsg_metric, &ur->rtmsg_metric) ||
    615	    get_user(rt.rtmsg_info, &ur->rtmsg_info) ||
    616	    get_user(rt.rtmsg_flags, &ur->rtmsg_flags) ||
    617	    get_user(rt.rtmsg_ifindex, &ur->rtmsg_ifindex))
    618		return -EFAULT;
    619
    620
    621	return ipv6_route_ioctl(sock_net(sk), cmd, &rt);
    622}
    623
    624int inet6_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
    625{
    626	void __user *argp = compat_ptr(arg);
    627	struct sock *sk = sock->sk;
    628
    629	switch (cmd) {
    630	case SIOCADDRT:
    631	case SIOCDELRT:
    632		return inet6_compat_routing_ioctl(sk, cmd, argp);
    633	default:
    634		return -ENOIOCTLCMD;
    635	}
    636}
    637EXPORT_SYMBOL_GPL(inet6_compat_ioctl);
    638#endif /* CONFIG_COMPAT */
    639
    640INDIRECT_CALLABLE_DECLARE(int udpv6_sendmsg(struct sock *, struct msghdr *,
    641					    size_t));
    642int inet6_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
    643{
    644	struct sock *sk = sock->sk;
    645	const struct proto *prot;
    646
    647	if (unlikely(inet_send_prepare(sk)))
    648		return -EAGAIN;
    649
    650	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
    651	prot = READ_ONCE(sk->sk_prot);
    652	return INDIRECT_CALL_2(prot->sendmsg, tcp_sendmsg, udpv6_sendmsg,
    653			       sk, msg, size);
    654}
    655
    656INDIRECT_CALLABLE_DECLARE(int udpv6_recvmsg(struct sock *, struct msghdr *,
    657					    size_t, int, int *));
    658int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
    659		  int flags)
    660{
    661	struct sock *sk = sock->sk;
    662	const struct proto *prot;
    663	int addr_len = 0;
    664	int err;
    665
    666	if (likely(!(flags & MSG_ERRQUEUE)))
    667		sock_rps_record_flow(sk);
    668
    669	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
    670	prot = READ_ONCE(sk->sk_prot);
    671	err = INDIRECT_CALL_2(prot->recvmsg, tcp_recvmsg, udpv6_recvmsg,
    672			      sk, msg, size, flags, &addr_len);
    673	if (err >= 0)
    674		msg->msg_namelen = addr_len;
    675	return err;
    676}
    677
    678const struct proto_ops inet6_stream_ops = {
    679	.family		   = PF_INET6,
    680	.owner		   = THIS_MODULE,
    681	.release	   = inet6_release,
    682	.bind		   = inet6_bind,
    683	.connect	   = inet_stream_connect,	/* ok		*/
    684	.socketpair	   = sock_no_socketpair,	/* a do nothing	*/
    685	.accept		   = inet_accept,		/* ok		*/
    686	.getname	   = inet6_getname,
    687	.poll		   = tcp_poll,			/* ok		*/
    688	.ioctl		   = inet6_ioctl,		/* must change  */
    689	.gettstamp	   = sock_gettstamp,
    690	.listen		   = inet_listen,		/* ok		*/
    691	.shutdown	   = inet_shutdown,		/* ok		*/
    692	.setsockopt	   = sock_common_setsockopt,	/* ok		*/
    693	.getsockopt	   = sock_common_getsockopt,	/* ok		*/
    694	.sendmsg	   = inet6_sendmsg,		/* retpoline's sake */
    695	.recvmsg	   = inet6_recvmsg,		/* retpoline's sake */
    696#ifdef CONFIG_MMU
    697	.mmap		   = tcp_mmap,
    698#endif
    699	.sendpage	   = inet_sendpage,
    700	.sendmsg_locked    = tcp_sendmsg_locked,
    701	.sendpage_locked   = tcp_sendpage_locked,
    702	.splice_read	   = tcp_splice_read,
    703	.read_sock	   = tcp_read_sock,
    704	.peek_len	   = tcp_peek_len,
    705#ifdef CONFIG_COMPAT
    706	.compat_ioctl	   = inet6_compat_ioctl,
    707#endif
    708	.set_rcvlowat	   = tcp_set_rcvlowat,
    709};
    710
    711const struct proto_ops inet6_dgram_ops = {
    712	.family		   = PF_INET6,
    713	.owner		   = THIS_MODULE,
    714	.release	   = inet6_release,
    715	.bind		   = inet6_bind,
    716	.connect	   = inet_dgram_connect,	/* ok		*/
    717	.socketpair	   = sock_no_socketpair,	/* a do nothing	*/
    718	.accept		   = sock_no_accept,		/* a do nothing	*/
    719	.getname	   = inet6_getname,
    720	.poll		   = udp_poll,			/* ok		*/
    721	.ioctl		   = inet6_ioctl,		/* must change  */
    722	.gettstamp	   = sock_gettstamp,
    723	.listen		   = sock_no_listen,		/* ok		*/
    724	.shutdown	   = inet_shutdown,		/* ok		*/
    725	.setsockopt	   = sock_common_setsockopt,	/* ok		*/
    726	.getsockopt	   = sock_common_getsockopt,	/* ok		*/
    727	.sendmsg	   = inet6_sendmsg,		/* retpoline's sake */
    728	.recvmsg	   = inet6_recvmsg,		/* retpoline's sake */
    729	.read_sock	   = udp_read_sock,
    730	.mmap		   = sock_no_mmap,
    731	.sendpage	   = sock_no_sendpage,
    732	.set_peek_off	   = sk_set_peek_off,
    733#ifdef CONFIG_COMPAT
    734	.compat_ioctl	   = inet6_compat_ioctl,
    735#endif
    736};
    737
    738static const struct net_proto_family inet6_family_ops = {
    739	.family = PF_INET6,
    740	.create = inet6_create,
    741	.owner	= THIS_MODULE,
    742};
    743
    744int inet6_register_protosw(struct inet_protosw *p)
    745{
    746	struct list_head *lh;
    747	struct inet_protosw *answer;
    748	struct list_head *last_perm;
    749	int protocol = p->protocol;
    750	int ret;
    751
    752	spin_lock_bh(&inetsw6_lock);
    753
    754	ret = -EINVAL;
    755	if (p->type >= SOCK_MAX)
    756		goto out_illegal;
    757
    758	/* If we are trying to override a permanent protocol, bail. */
    759	answer = NULL;
    760	ret = -EPERM;
    761	last_perm = &inetsw6[p->type];
    762	list_for_each(lh, &inetsw6[p->type]) {
    763		answer = list_entry(lh, struct inet_protosw, list);
    764
    765		/* Check only the non-wild match. */
    766		if (INET_PROTOSW_PERMANENT & answer->flags) {
    767			if (protocol == answer->protocol)
    768				break;
    769			last_perm = lh;
    770		}
    771
    772		answer = NULL;
    773	}
    774	if (answer)
    775		goto out_permanent;
    776
    777	/* Add the new entry after the last permanent entry if any, so that
    778	 * the new entry does not override a permanent entry when matched with
    779	 * a wild-card protocol. But it is allowed to override any existing
    780	 * non-permanent entry.  This means that when we remove this entry, the
    781	 * system automatically returns to the old behavior.
    782	 */
    783	list_add_rcu(&p->list, last_perm);
    784	ret = 0;
    785out:
    786	spin_unlock_bh(&inetsw6_lock);
    787	return ret;
    788
    789out_permanent:
    790	pr_err("Attempt to override permanent protocol %d\n", protocol);
    791	goto out;
    792
    793out_illegal:
    794	pr_err("Ignoring attempt to register invalid socket type %d\n",
    795	       p->type);
    796	goto out;
    797}
    798EXPORT_SYMBOL(inet6_register_protosw);
    799
    800void
    801inet6_unregister_protosw(struct inet_protosw *p)
    802{
    803	if (INET_PROTOSW_PERMANENT & p->flags) {
    804		pr_err("Attempt to unregister permanent protocol %d\n",
    805		       p->protocol);
    806	} else {
    807		spin_lock_bh(&inetsw6_lock);
    808		list_del_rcu(&p->list);
    809		spin_unlock_bh(&inetsw6_lock);
    810
    811		synchronize_net();
    812	}
    813}
    814EXPORT_SYMBOL(inet6_unregister_protosw);
    815
    816int inet6_sk_rebuild_header(struct sock *sk)
    817{
    818	struct ipv6_pinfo *np = inet6_sk(sk);
    819	struct dst_entry *dst;
    820
    821	dst = __sk_dst_check(sk, np->dst_cookie);
    822
    823	if (!dst) {
    824		struct inet_sock *inet = inet_sk(sk);
    825		struct in6_addr *final_p, final;
    826		struct flowi6 fl6;
    827
    828		memset(&fl6, 0, sizeof(fl6));
    829		fl6.flowi6_proto = sk->sk_protocol;
    830		fl6.daddr = sk->sk_v6_daddr;
    831		fl6.saddr = np->saddr;
    832		fl6.flowlabel = np->flow_label;
    833		fl6.flowi6_oif = sk->sk_bound_dev_if;
    834		fl6.flowi6_mark = sk->sk_mark;
    835		fl6.fl6_dport = inet->inet_dport;
    836		fl6.fl6_sport = inet->inet_sport;
    837		fl6.flowi6_uid = sk->sk_uid;
    838		security_sk_classify_flow(sk, flowi6_to_flowi_common(&fl6));
    839
    840		rcu_read_lock();
    841		final_p = fl6_update_dst(&fl6, rcu_dereference(np->opt),
    842					 &final);
    843		rcu_read_unlock();
    844
    845		dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
    846		if (IS_ERR(dst)) {
    847			sk->sk_route_caps = 0;
    848			sk->sk_err_soft = -PTR_ERR(dst);
    849			return PTR_ERR(dst);
    850		}
    851
    852		ip6_dst_store(sk, dst, NULL, NULL);
    853	}
    854
    855	return 0;
    856}
    857EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header);
    858
    859bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb,
    860		       const struct inet6_skb_parm *opt)
    861{
    862	const struct ipv6_pinfo *np = inet6_sk(sk);
    863
    864	if (np->rxopt.all) {
    865		if (((opt->flags & IP6SKB_HOPBYHOP) &&
    866		     (np->rxopt.bits.hopopts || np->rxopt.bits.ohopopts)) ||
    867		    (ip6_flowinfo((struct ipv6hdr *) skb_network_header(skb)) &&
    868		     np->rxopt.bits.rxflow) ||
    869		    (opt->srcrt && (np->rxopt.bits.srcrt ||
    870		     np->rxopt.bits.osrcrt)) ||
    871		    ((opt->dst1 || opt->dst0) &&
    872		     (np->rxopt.bits.dstopts || np->rxopt.bits.odstopts)))
    873			return true;
    874	}
    875	return false;
    876}
    877EXPORT_SYMBOL_GPL(ipv6_opt_accepted);
    878
    879static struct packet_type ipv6_packet_type __read_mostly = {
    880	.type = cpu_to_be16(ETH_P_IPV6),
    881	.func = ipv6_rcv,
    882	.list_func = ipv6_list_rcv,
    883};
    884
    885static int __init ipv6_packet_init(void)
    886{
    887	dev_add_pack(&ipv6_packet_type);
    888	return 0;
    889}
    890
    891static void ipv6_packet_cleanup(void)
    892{
    893	dev_remove_pack(&ipv6_packet_type);
    894}
    895
    896static int __net_init ipv6_init_mibs(struct net *net)
    897{
    898	int i;
    899
    900	net->mib.udp_stats_in6 = alloc_percpu(struct udp_mib);
    901	if (!net->mib.udp_stats_in6)
    902		return -ENOMEM;
    903	net->mib.udplite_stats_in6 = alloc_percpu(struct udp_mib);
    904	if (!net->mib.udplite_stats_in6)
    905		goto err_udplite_mib;
    906	net->mib.ipv6_statistics = alloc_percpu(struct ipstats_mib);
    907	if (!net->mib.ipv6_statistics)
    908		goto err_ip_mib;
    909
    910	for_each_possible_cpu(i) {
    911		struct ipstats_mib *af_inet6_stats;
    912		af_inet6_stats = per_cpu_ptr(net->mib.ipv6_statistics, i);
    913		u64_stats_init(&af_inet6_stats->syncp);
    914	}
    915
    916
    917	net->mib.icmpv6_statistics = alloc_percpu(struct icmpv6_mib);
    918	if (!net->mib.icmpv6_statistics)
    919		goto err_icmp_mib;
    920	net->mib.icmpv6msg_statistics = kzalloc(sizeof(struct icmpv6msg_mib),
    921						GFP_KERNEL);
    922	if (!net->mib.icmpv6msg_statistics)
    923		goto err_icmpmsg_mib;
    924	return 0;
    925
    926err_icmpmsg_mib:
    927	free_percpu(net->mib.icmpv6_statistics);
    928err_icmp_mib:
    929	free_percpu(net->mib.ipv6_statistics);
    930err_ip_mib:
    931	free_percpu(net->mib.udplite_stats_in6);
    932err_udplite_mib:
    933	free_percpu(net->mib.udp_stats_in6);
    934	return -ENOMEM;
    935}
    936
    937static void ipv6_cleanup_mibs(struct net *net)
    938{
    939	free_percpu(net->mib.udp_stats_in6);
    940	free_percpu(net->mib.udplite_stats_in6);
    941	free_percpu(net->mib.ipv6_statistics);
    942	free_percpu(net->mib.icmpv6_statistics);
    943	kfree(net->mib.icmpv6msg_statistics);
    944}
    945
    946static int __net_init inet6_net_init(struct net *net)
    947{
    948	int err = 0;
    949
    950	net->ipv6.sysctl.bindv6only = 0;
    951	net->ipv6.sysctl.icmpv6_time = 1*HZ;
    952	net->ipv6.sysctl.icmpv6_echo_ignore_all = 0;
    953	net->ipv6.sysctl.icmpv6_echo_ignore_multicast = 0;
    954	net->ipv6.sysctl.icmpv6_echo_ignore_anycast = 0;
    955
    956	/* By default, rate limit error messages.
    957	 * Except for pmtu discovery, it would break it.
    958	 * proc_do_large_bitmap needs pointer to the bitmap.
    959	 */
    960	bitmap_set(net->ipv6.sysctl.icmpv6_ratemask, 0, ICMPV6_ERRMSG_MAX + 1);
    961	bitmap_clear(net->ipv6.sysctl.icmpv6_ratemask, ICMPV6_PKT_TOOBIG, 1);
    962	net->ipv6.sysctl.icmpv6_ratemask_ptr = net->ipv6.sysctl.icmpv6_ratemask;
    963
    964	net->ipv6.sysctl.flowlabel_consistency = 1;
    965	net->ipv6.sysctl.auto_flowlabels = IP6_DEFAULT_AUTO_FLOW_LABELS;
    966	net->ipv6.sysctl.idgen_retries = 3;
    967	net->ipv6.sysctl.idgen_delay = 1 * HZ;
    968	net->ipv6.sysctl.flowlabel_state_ranges = 0;
    969	net->ipv6.sysctl.max_dst_opts_cnt = IP6_DEFAULT_MAX_DST_OPTS_CNT;
    970	net->ipv6.sysctl.max_hbh_opts_cnt = IP6_DEFAULT_MAX_HBH_OPTS_CNT;
    971	net->ipv6.sysctl.max_dst_opts_len = IP6_DEFAULT_MAX_DST_OPTS_LEN;
    972	net->ipv6.sysctl.max_hbh_opts_len = IP6_DEFAULT_MAX_HBH_OPTS_LEN;
    973	net->ipv6.sysctl.fib_notify_on_flag_change = 0;
    974	atomic_set(&net->ipv6.fib6_sernum, 1);
    975
    976	net->ipv6.sysctl.ioam6_id = IOAM6_DEFAULT_ID;
    977	net->ipv6.sysctl.ioam6_id_wide = IOAM6_DEFAULT_ID_WIDE;
    978
    979	err = ipv6_init_mibs(net);
    980	if (err)
    981		return err;
    982#ifdef CONFIG_PROC_FS
    983	err = udp6_proc_init(net);
    984	if (err)
    985		goto out;
    986	err = tcp6_proc_init(net);
    987	if (err)
    988		goto proc_tcp6_fail;
    989	err = ac6_proc_init(net);
    990	if (err)
    991		goto proc_ac6_fail;
    992#endif
    993	return err;
    994
    995#ifdef CONFIG_PROC_FS
    996proc_ac6_fail:
    997	tcp6_proc_exit(net);
    998proc_tcp6_fail:
    999	udp6_proc_exit(net);
   1000out:
   1001	ipv6_cleanup_mibs(net);
   1002	return err;
   1003#endif
   1004}
   1005
   1006static void __net_exit inet6_net_exit(struct net *net)
   1007{
   1008#ifdef CONFIG_PROC_FS
   1009	udp6_proc_exit(net);
   1010	tcp6_proc_exit(net);
   1011	ac6_proc_exit(net);
   1012#endif
   1013	ipv6_cleanup_mibs(net);
   1014}
   1015
   1016static struct pernet_operations inet6_net_ops = {
   1017	.init = inet6_net_init,
   1018	.exit = inet6_net_exit,
   1019};
   1020
   1021static int ipv6_route_input(struct sk_buff *skb)
   1022{
   1023	ip6_route_input(skb);
   1024	return skb_dst(skb)->error;
   1025}
   1026
   1027static const struct ipv6_stub ipv6_stub_impl = {
   1028	.ipv6_sock_mc_join = ipv6_sock_mc_join,
   1029	.ipv6_sock_mc_drop = ipv6_sock_mc_drop,
   1030	.ipv6_dst_lookup_flow = ip6_dst_lookup_flow,
   1031	.ipv6_route_input  = ipv6_route_input,
   1032	.fib6_get_table	   = fib6_get_table,
   1033	.fib6_table_lookup = fib6_table_lookup,
   1034	.fib6_lookup       = fib6_lookup,
   1035	.fib6_select_path  = fib6_select_path,
   1036	.ip6_mtu_from_fib6 = ip6_mtu_from_fib6,
   1037	.fib6_nh_init	   = fib6_nh_init,
   1038	.fib6_nh_release   = fib6_nh_release,
   1039	.fib6_nh_release_dsts = fib6_nh_release_dsts,
   1040	.fib6_update_sernum = fib6_update_sernum_stub,
   1041	.fib6_rt_update	   = fib6_rt_update,
   1042	.ip6_del_rt	   = ip6_del_rt,
   1043	.udpv6_encap_enable = udpv6_encap_enable,
   1044	.ndisc_send_na = ndisc_send_na,
   1045#if IS_ENABLED(CONFIG_XFRM)
   1046	.xfrm6_local_rxpmtu = xfrm6_local_rxpmtu,
   1047	.xfrm6_udp_encap_rcv = xfrm6_udp_encap_rcv,
   1048	.xfrm6_rcv_encap = xfrm6_rcv_encap,
   1049#endif
   1050	.nd_tbl	= &nd_tbl,
   1051	.ipv6_fragment = ip6_fragment,
   1052	.ipv6_dev_find = ipv6_dev_find,
   1053};
   1054
   1055static const struct ipv6_bpf_stub ipv6_bpf_stub_impl = {
   1056	.inet6_bind = __inet6_bind,
   1057	.udp6_lib_lookup = __udp6_lib_lookup,
   1058};
   1059
   1060static int __init inet6_init(void)
   1061{
   1062	struct list_head *r;
   1063	int err = 0;
   1064
   1065	sock_skb_cb_check_size(sizeof(struct inet6_skb_parm));
   1066
   1067	/* Register the socket-side information for inet6_create.  */
   1068	for (r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r)
   1069		INIT_LIST_HEAD(r);
   1070
   1071	if (disable_ipv6_mod) {
   1072		pr_info("Loaded, but administratively disabled, reboot required to enable\n");
   1073		goto out;
   1074	}
   1075
   1076	err = proto_register(&tcpv6_prot, 1);
   1077	if (err)
   1078		goto out;
   1079
   1080	err = proto_register(&udpv6_prot, 1);
   1081	if (err)
   1082		goto out_unregister_tcp_proto;
   1083
   1084	err = proto_register(&udplitev6_prot, 1);
   1085	if (err)
   1086		goto out_unregister_udp_proto;
   1087
   1088	err = proto_register(&rawv6_prot, 1);
   1089	if (err)
   1090		goto out_unregister_udplite_proto;
   1091
   1092	err = proto_register(&pingv6_prot, 1);
   1093	if (err)
   1094		goto out_unregister_raw_proto;
   1095
   1096	/* We MUST register RAW sockets before we create the ICMP6,
   1097	 * IGMP6, or NDISC control sockets.
   1098	 */
   1099	err = rawv6_init();
   1100	if (err)
   1101		goto out_unregister_ping_proto;
   1102
   1103	/* Register the family here so that the init calls below will
   1104	 * be able to create sockets. (?? is this dangerous ??)
   1105	 */
   1106	err = sock_register(&inet6_family_ops);
   1107	if (err)
   1108		goto out_sock_register_fail;
   1109
   1110	/*
   1111	 *	ipngwg API draft makes clear that the correct semantics
   1112	 *	for TCP and UDP is to consider one TCP and UDP instance
   1113	 *	in a host available by both INET and INET6 APIs and
   1114	 *	able to communicate via both network protocols.
   1115	 */
   1116
   1117	err = register_pernet_subsys(&inet6_net_ops);
   1118	if (err)
   1119		goto register_pernet_fail;
   1120	err = ip6_mr_init();
   1121	if (err)
   1122		goto ipmr_fail;
   1123	err = icmpv6_init();
   1124	if (err)
   1125		goto icmp_fail;
   1126	err = ndisc_init();
   1127	if (err)
   1128		goto ndisc_fail;
   1129	err = igmp6_init();
   1130	if (err)
   1131		goto igmp_fail;
   1132
   1133	err = ipv6_netfilter_init();
   1134	if (err)
   1135		goto netfilter_fail;
   1136	/* Create /proc/foo6 entries. */
   1137#ifdef CONFIG_PROC_FS
   1138	err = -ENOMEM;
   1139	if (raw6_proc_init())
   1140		goto proc_raw6_fail;
   1141	if (udplite6_proc_init())
   1142		goto proc_udplite6_fail;
   1143	if (ipv6_misc_proc_init())
   1144		goto proc_misc6_fail;
   1145	if (if6_proc_init())
   1146		goto proc_if6_fail;
   1147#endif
   1148	err = ip6_route_init();
   1149	if (err)
   1150		goto ip6_route_fail;
   1151	err = ndisc_late_init();
   1152	if (err)
   1153		goto ndisc_late_fail;
   1154	err = ip6_flowlabel_init();
   1155	if (err)
   1156		goto ip6_flowlabel_fail;
   1157	err = ipv6_anycast_init();
   1158	if (err)
   1159		goto ipv6_anycast_fail;
   1160	err = addrconf_init();
   1161	if (err)
   1162		goto addrconf_fail;
   1163
   1164	/* Init v6 extension headers. */
   1165	err = ipv6_exthdrs_init();
   1166	if (err)
   1167		goto ipv6_exthdrs_fail;
   1168
   1169	err = ipv6_frag_init();
   1170	if (err)
   1171		goto ipv6_frag_fail;
   1172
   1173	/* Init v6 transport protocols. */
   1174	err = udpv6_init();
   1175	if (err)
   1176		goto udpv6_fail;
   1177
   1178	err = udplitev6_init();
   1179	if (err)
   1180		goto udplitev6_fail;
   1181
   1182	err = udpv6_offload_init();
   1183	if (err)
   1184		goto udpv6_offload_fail;
   1185
   1186	err = tcpv6_init();
   1187	if (err)
   1188		goto tcpv6_fail;
   1189
   1190	err = ipv6_packet_init();
   1191	if (err)
   1192		goto ipv6_packet_fail;
   1193
   1194	err = pingv6_init();
   1195	if (err)
   1196		goto pingv6_fail;
   1197
   1198	err = calipso_init();
   1199	if (err)
   1200		goto calipso_fail;
   1201
   1202	err = seg6_init();
   1203	if (err)
   1204		goto seg6_fail;
   1205
   1206	err = rpl_init();
   1207	if (err)
   1208		goto rpl_fail;
   1209
   1210	err = ioam6_init();
   1211	if (err)
   1212		goto ioam6_fail;
   1213
   1214	err = igmp6_late_init();
   1215	if (err)
   1216		goto igmp6_late_err;
   1217
   1218#ifdef CONFIG_SYSCTL
   1219	err = ipv6_sysctl_register();
   1220	if (err)
   1221		goto sysctl_fail;
   1222#endif
   1223
   1224	/* ensure that ipv6 stubs are visible only after ipv6 is ready */
   1225	wmb();
   1226	ipv6_stub = &ipv6_stub_impl;
   1227	ipv6_bpf_stub = &ipv6_bpf_stub_impl;
   1228out:
   1229	return err;
   1230
   1231#ifdef CONFIG_SYSCTL
   1232sysctl_fail:
   1233	igmp6_late_cleanup();
   1234#endif
   1235igmp6_late_err:
   1236	ioam6_exit();
   1237ioam6_fail:
   1238	rpl_exit();
   1239rpl_fail:
   1240	seg6_exit();
   1241seg6_fail:
   1242	calipso_exit();
   1243calipso_fail:
   1244	pingv6_exit();
   1245pingv6_fail:
   1246	ipv6_packet_cleanup();
   1247ipv6_packet_fail:
   1248	tcpv6_exit();
   1249tcpv6_fail:
   1250	udpv6_offload_exit();
   1251udpv6_offload_fail:
   1252	udplitev6_exit();
   1253udplitev6_fail:
   1254	udpv6_exit();
   1255udpv6_fail:
   1256	ipv6_frag_exit();
   1257ipv6_frag_fail:
   1258	ipv6_exthdrs_exit();
   1259ipv6_exthdrs_fail:
   1260	addrconf_cleanup();
   1261addrconf_fail:
   1262	ipv6_anycast_cleanup();
   1263ipv6_anycast_fail:
   1264	ip6_flowlabel_cleanup();
   1265ip6_flowlabel_fail:
   1266	ndisc_late_cleanup();
   1267ndisc_late_fail:
   1268	ip6_route_cleanup();
   1269ip6_route_fail:
   1270#ifdef CONFIG_PROC_FS
   1271	if6_proc_exit();
   1272proc_if6_fail:
   1273	ipv6_misc_proc_exit();
   1274proc_misc6_fail:
   1275	udplite6_proc_exit();
   1276proc_udplite6_fail:
   1277	raw6_proc_exit();
   1278proc_raw6_fail:
   1279#endif
   1280	ipv6_netfilter_fini();
   1281netfilter_fail:
   1282	igmp6_cleanup();
   1283igmp_fail:
   1284	ndisc_cleanup();
   1285ndisc_fail:
   1286	icmpv6_cleanup();
   1287icmp_fail:
   1288	ip6_mr_cleanup();
   1289ipmr_fail:
   1290	unregister_pernet_subsys(&inet6_net_ops);
   1291register_pernet_fail:
   1292	sock_unregister(PF_INET6);
   1293	rtnl_unregister_all(PF_INET6);
   1294out_sock_register_fail:
   1295	rawv6_exit();
   1296out_unregister_ping_proto:
   1297	proto_unregister(&pingv6_prot);
   1298out_unregister_raw_proto:
   1299	proto_unregister(&rawv6_prot);
   1300out_unregister_udplite_proto:
   1301	proto_unregister(&udplitev6_prot);
   1302out_unregister_udp_proto:
   1303	proto_unregister(&udpv6_prot);
   1304out_unregister_tcp_proto:
   1305	proto_unregister(&tcpv6_prot);
   1306	goto out;
   1307}
   1308module_init(inet6_init);
   1309
   1310MODULE_ALIAS_NETPROTO(PF_INET6);