Linux Audio

Check our new training course

Loading...
v4.17
 
   1/*
   2 *	IPv6 output functions
   3 *	Linux INET6 implementation
   4 *
   5 *	Authors:
   6 *	Pedro Roque		<roque@di.fc.ul.pt>
   7 *
   8 *	Based on linux/net/ipv4/ip_output.c
   9 *
  10 *	This program is free software; you can redistribute it and/or
  11 *      modify it under the terms of the GNU General Public License
  12 *      as published by the Free Software Foundation; either version
  13 *      2 of the License, or (at your option) any later version.
  14 *
  15 *	Changes:
  16 *	A.N.Kuznetsov	:	airthmetics in fragmentation.
  17 *				extension headers are implemented.
  18 *				route changes now work.
  19 *				ip6_forward does not confuse sniffers.
  20 *				etc.
  21 *
  22 *      H. von Brand    :       Added missing #include <linux/string.h>
  23 *	Imran Patel	:	frag id should be in NBO
  24 *      Kazunori MIYAZAWA @USAGI
  25 *			:       add ip6_append_data and related functions
  26 *				for datagram xmit
  27 */
  28
  29#include <linux/errno.h>
  30#include <linux/kernel.h>
  31#include <linux/string.h>
  32#include <linux/socket.h>
  33#include <linux/net.h>
  34#include <linux/netdevice.h>
  35#include <linux/if_arp.h>
  36#include <linux/in6.h>
  37#include <linux/tcp.h>
  38#include <linux/route.h>
  39#include <linux/module.h>
  40#include <linux/slab.h>
  41
  42#include <linux/bpf-cgroup.h>
  43#include <linux/netfilter.h>
  44#include <linux/netfilter_ipv6.h>
  45
  46#include <net/sock.h>
  47#include <net/snmp.h>
  48
 
  49#include <net/ipv6.h>
  50#include <net/ndisc.h>
  51#include <net/protocol.h>
  52#include <net/ip6_route.h>
  53#include <net/addrconf.h>
  54#include <net/rawv6.h>
  55#include <net/icmp.h>
  56#include <net/xfrm.h>
  57#include <net/checksum.h>
  58#include <linux/mroute6.h>
  59#include <net/l3mdev.h>
  60#include <net/lwtunnel.h>
 
  61
  62static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb)
  63{
  64	struct dst_entry *dst = skb_dst(skb);
  65	struct net_device *dev = dst->dev;
 
 
 
 
  66	struct neighbour *neigh;
  67	struct in6_addr *nexthop;
  68	int ret;
  69
  70	if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
  71		struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
 
 
 
 
 
 
 
 
 
 
  72
 
 
 
  73		if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) &&
  74		    ((mroute6_is_socket(net, skb) &&
  75		     !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) ||
  76		     ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr,
  77					 &ipv6_hdr(skb)->saddr))) {
  78			struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
  79
  80			/* Do not check for IFF_ALLMULTI; multicast routing
  81			   is not supported in any case.
  82			 */
  83			if (newskb)
  84				NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING,
  85					net, sk, newskb, NULL, newskb->dev,
  86					dev_loopback_xmit);
  87
  88			if (ipv6_hdr(skb)->hop_limit == 0) {
  89				IP6_INC_STATS(net, idev,
  90					      IPSTATS_MIB_OUTDISCARDS);
  91				kfree_skb(skb);
  92				return 0;
  93			}
  94		}
  95
  96		IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, skb->len);
  97
  98		if (IPV6_ADDR_MC_SCOPE(&ipv6_hdr(skb)->daddr) <=
  99		    IPV6_ADDR_SCOPE_NODELOCAL &&
 100		    !(dev->flags & IFF_LOOPBACK)) {
 101			kfree_skb(skb);
 102			return 0;
 103		}
 104	}
 105
 106	if (lwtunnel_xmit_redirect(dst->lwtstate)) {
 107		int res = lwtunnel_xmit(skb);
 108
 109		if (res < 0 || res == LWTUNNEL_XMIT_DONE)
 110			return res;
 111	}
 112
 113	rcu_read_lock_bh();
 114	nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
 115	neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
 116	if (unlikely(!neigh))
 117		neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
 118	if (!IS_ERR(neigh)) {
 119		sock_confirm_neigh(skb, neigh);
 120		ret = neigh_output(neigh, skb);
 121		rcu_read_unlock_bh();
 122		return ret;
 123	}
 124	rcu_read_unlock_bh();
 125
 126	IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
 127	kfree_skb(skb);
 128	return -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 129}
 130
 131static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
 
 
 132{
 133	int ret;
 
 
 134
 135	ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb);
 136	if (ret) {
 
 
 
 
 
 137		kfree_skb(skb);
 138		return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 139	}
 140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 141#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
 142	/* Policy lookup after SNAT yielded a new policy */
 143	if (skb_dst(skb)->xfrm) {
 144		IPCB(skb)->flags |= IPSKB_REROUTED;
 145		return dst_output(net, sk, skb);
 146	}
 147#endif
 148
 149	if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
 150	    dst_allfrag(skb_dst(skb)) ||
 
 
 
 151	    (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
 152		return ip6_fragment(net, sk, skb, ip6_finish_output2);
 153	else
 154		return ip6_finish_output2(net, sk, skb);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 155}
 156
 157int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
 158{
 159	struct net_device *dev = skb_dst(skb)->dev;
 160	struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
 161
 162	skb->protocol = htons(ETH_P_IPV6);
 163	skb->dev = dev;
 164
 165	if (unlikely(idev->cnf.disable_ipv6)) {
 166		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
 167		kfree_skb(skb);
 168		return 0;
 169	}
 170
 171	return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING,
 172			    net, sk, skb, NULL, dev,
 173			    ip6_finish_output,
 174			    !(IP6CB(skb)->flags & IP6SKB_REROUTED));
 175}
 
 176
 177bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np)
 178{
 179	if (!np->autoflowlabel_set)
 180		return ip6_default_np_autolabel(net);
 181	else
 182		return np->autoflowlabel;
 183}
 184
 185/*
 186 * xmit an sk_buff (used by TCP, SCTP and DCCP)
 187 * Note : socket lock is not held for SYNACK packets, but might be modified
 188 * by calls to skb_set_owner_w() and ipv6_local_error(),
 189 * which are using proper atomic operations or spinlocks.
 190 */
 191int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
 192	     __u32 mark, struct ipv6_txoptions *opt, int tclass)
 193{
 194	struct net *net = sock_net(sk);
 195	const struct ipv6_pinfo *np = inet6_sk(sk);
 196	struct in6_addr *first_hop = &fl6->daddr;
 197	struct dst_entry *dst = skb_dst(skb);
 
 
 
 
 
 198	struct ipv6hdr *hdr;
 199	u8  proto = fl6->flowi6_proto;
 200	int seg_len = skb->len;
 201	int hlimit = -1;
 202	u32 mtu;
 203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 204	if (opt) {
 205		unsigned int head_room;
 206
 207		/* First: exthdrs may take lots of space (~8K for now)
 208		   MAX_HEADER is not enough.
 209		 */
 210		head_room = opt->opt_nflen + opt->opt_flen;
 211		seg_len += head_room;
 212		head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev);
 213
 214		if (skb_headroom(skb) < head_room) {
 215			struct sk_buff *skb2 = skb_realloc_headroom(skb, head_room);
 216			if (!skb2) {
 217				IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 218					      IPSTATS_MIB_OUTDISCARDS);
 219				kfree_skb(skb);
 220				return -ENOBUFS;
 221			}
 222			consume_skb(skb);
 223			skb = skb2;
 224			/* skb_set_owner_w() changes sk->sk_wmem_alloc atomically,
 225			 * it is safe to call in our context (socket lock not held)
 226			 */
 227			skb_set_owner_w(skb, (struct sock *)sk);
 228		}
 229		if (opt->opt_flen)
 230			ipv6_push_frag_opts(skb, opt, &proto);
 
 231		if (opt->opt_nflen)
 232			ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop,
 233					     &fl6->saddr);
 234	}
 235
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 236	skb_push(skb, sizeof(struct ipv6hdr));
 237	skb_reset_network_header(skb);
 238	hdr = ipv6_hdr(skb);
 239
 240	/*
 241	 *	Fill in the IPv6 header
 242	 */
 243	if (np)
 244		hlimit = np->hop_limit;
 245	if (hlimit < 0)
 246		hlimit = ip6_dst_hoplimit(dst);
 247
 248	ip6_flow_hdr(hdr, tclass, ip6_make_flowlabel(net, skb, fl6->flowlabel,
 249				ip6_autoflowlabel(net, np), fl6));
 250
 251	hdr->payload_len = htons(seg_len);
 252	hdr->nexthdr = proto;
 253	hdr->hop_limit = hlimit;
 254
 255	hdr->saddr = fl6->saddr;
 256	hdr->daddr = *first_hop;
 257
 258	skb->protocol = htons(ETH_P_IPV6);
 259	skb->priority = sk->sk_priority;
 260	skb->mark = mark;
 261
 262	mtu = dst_mtu(dst);
 263	if ((skb->len <= mtu) || skb->ignore_df || skb_is_gso(skb)) {
 264		IP6_UPD_PO_STATS(net, ip6_dst_idev(skb_dst(skb)),
 265			      IPSTATS_MIB_OUT, skb->len);
 266
 267		/* if egress device is enslaved to an L3 master device pass the
 268		 * skb to its handler for processing
 269		 */
 270		skb = l3mdev_ip6_out((struct sock *)sk, skb);
 271		if (unlikely(!skb))
 272			return 0;
 273
 274		/* hooks should never assume socket lock is held.
 275		 * we promote our socket to non const
 276		 */
 277		return NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT,
 278			       net, (struct sock *)sk, skb, NULL, dst->dev,
 279			       dst_output);
 280	}
 281
 282	skb->dev = dst->dev;
 283	/* ipv6_local_error() does not require socket lock,
 284	 * we promote our socket to non const
 285	 */
 286	ipv6_local_error((struct sock *)sk, EMSGSIZE, fl6, mtu);
 287
 288	IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_FRAGFAILS);
 289	kfree_skb(skb);
 290	return -EMSGSIZE;
 291}
 292EXPORT_SYMBOL(ip6_xmit);
 293
 294static int ip6_call_ra_chain(struct sk_buff *skb, int sel)
 295{
 296	struct ip6_ra_chain *ra;
 297	struct sock *last = NULL;
 298
 299	read_lock(&ip6_ra_lock);
 300	for (ra = ip6_ra_chain; ra; ra = ra->next) {
 301		struct sock *sk = ra->sk;
 302		if (sk && ra->sel == sel &&
 303		    (!sk->sk_bound_dev_if ||
 304		     sk->sk_bound_dev_if == skb->dev->ifindex)) {
 
 
 
 
 
 305			if (last) {
 306				struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
 307				if (skb2)
 308					rawv6_rcv(last, skb2);
 309			}
 310			last = sk;
 311		}
 312	}
 313
 314	if (last) {
 315		rawv6_rcv(last, skb);
 316		read_unlock(&ip6_ra_lock);
 317		return 1;
 318	}
 319	read_unlock(&ip6_ra_lock);
 320	return 0;
 321}
 322
 323static int ip6_forward_proxy_check(struct sk_buff *skb)
 324{
 325	struct ipv6hdr *hdr = ipv6_hdr(skb);
 326	u8 nexthdr = hdr->nexthdr;
 327	__be16 frag_off;
 328	int offset;
 329
 330	if (ipv6_ext_hdr(nexthdr)) {
 331		offset = ipv6_skip_exthdr(skb, sizeof(*hdr), &nexthdr, &frag_off);
 332		if (offset < 0)
 333			return 0;
 334	} else
 335		offset = sizeof(struct ipv6hdr);
 336
 337	if (nexthdr == IPPROTO_ICMPV6) {
 338		struct icmp6hdr *icmp6;
 339
 340		if (!pskb_may_pull(skb, (skb_network_header(skb) +
 341					 offset + 1 - skb->data)))
 342			return 0;
 343
 344		icmp6 = (struct icmp6hdr *)(skb_network_header(skb) + offset);
 345
 346		switch (icmp6->icmp6_type) {
 347		case NDISC_ROUTER_SOLICITATION:
 348		case NDISC_ROUTER_ADVERTISEMENT:
 349		case NDISC_NEIGHBOUR_SOLICITATION:
 350		case NDISC_NEIGHBOUR_ADVERTISEMENT:
 351		case NDISC_REDIRECT:
 352			/* For reaction involving unicast neighbor discovery
 353			 * message destined to the proxied address, pass it to
 354			 * input function.
 355			 */
 356			return 1;
 357		default:
 358			break;
 359		}
 360	}
 361
 362	/*
 363	 * The proxying router can't forward traffic sent to a link-local
 364	 * address, so signal the sender and discard the packet. This
 365	 * behavior is clarified by the MIPv6 specification.
 366	 */
 367	if (ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) {
 368		dst_link_failure(skb);
 369		return -1;
 370	}
 371
 372	return 0;
 373}
 374
 375static inline int ip6_forward_finish(struct net *net, struct sock *sk,
 376				     struct sk_buff *skb)
 377{
 378	struct dst_entry *dst = skb_dst(skb);
 379
 380	__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
 381	__IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
 382
 383	return dst_output(net, sk, skb);
 384}
 385
 386unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst)
 387{
 388	unsigned int mtu;
 389	struct inet6_dev *idev;
 390
 391	if (dst_metric_locked(dst, RTAX_MTU)) {
 392		mtu = dst_metric_raw(dst, RTAX_MTU);
 393		if (mtu)
 394			return mtu;
 395	}
 
 396
 397	mtu = IPV6_MIN_MTU;
 398	rcu_read_lock();
 399	idev = __in6_dev_get(dst->dev);
 400	if (idev)
 401		mtu = idev->cnf.mtu6;
 402	rcu_read_unlock();
 403
 404	return mtu;
 405}
 406EXPORT_SYMBOL_GPL(ip6_dst_mtu_forward);
 407
 408static bool ip6_pkt_too_big(const struct sk_buff *skb, unsigned int mtu)
 409{
 410	if (skb->len <= mtu)
 411		return false;
 412
 413	/* ipv6 conntrack defrag sets max_frag_size + ignore_df */
 414	if (IP6CB(skb)->frag_max_size && IP6CB(skb)->frag_max_size > mtu)
 415		return true;
 416
 417	if (skb->ignore_df)
 418		return false;
 419
 420	if (skb_is_gso(skb) && skb_gso_validate_network_len(skb, mtu))
 421		return false;
 422
 423	return true;
 424}
 425
 426int ip6_forward(struct sk_buff *skb)
 427{
 428	struct dst_entry *dst = skb_dst(skb);
 429	struct ipv6hdr *hdr = ipv6_hdr(skb);
 430	struct inet6_skb_parm *opt = IP6CB(skb);
 431	struct net *net = dev_net(dst->dev);
 
 
 432	u32 mtu;
 433
 434	if (net->ipv6.devconf_all->forwarding == 0)
 
 435		goto error;
 436
 437	if (skb->pkt_type != PACKET_HOST)
 438		goto drop;
 439
 440	if (unlikely(skb->sk))
 441		goto drop;
 442
 443	if (skb_warn_if_lro(skb))
 444		goto drop;
 445
 446	if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) {
 447		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 448				IPSTATS_MIB_INDISCARDS);
 
 449		goto drop;
 450	}
 451
 452	skb_forward_csum(skb);
 453
 454	/*
 455	 *	We DO NOT make any processing on
 456	 *	RA packets, pushing them to user level AS IS
 457	 *	without ane WARRANTY that application will be able
 458	 *	to interpret them. The reason is that we
 459	 *	cannot make anything clever here.
 460	 *
 461	 *	We are not end-node, so that if packet contains
 462	 *	AH/ESP, we cannot make anything.
 463	 *	Defragmentation also would be mistake, RA packets
 464	 *	cannot be fragmented, because there is no warranty
 465	 *	that different fragments will go along one path. --ANK
 466	 */
 467	if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) {
 468		if (ip6_call_ra_chain(skb, ntohs(opt->ra)))
 469			return 0;
 470	}
 471
 472	/*
 473	 *	check and decrement ttl
 474	 */
 475	if (hdr->hop_limit <= 1) {
 476		/* Force OUTPUT device used as source address */
 477		skb->dev = dst->dev;
 478		icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0);
 479		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 480				IPSTATS_MIB_INHDRERRORS);
 481
 482		kfree_skb(skb);
 483		return -ETIMEDOUT;
 484	}
 485
 486	/* XXX: idev->cnf.proxy_ndp? */
 487	if (net->ipv6.devconf_all->proxy_ndp &&
 488	    pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
 489		int proxied = ip6_forward_proxy_check(skb);
 490		if (proxied > 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 491			return ip6_input(skb);
 492		else if (proxied < 0) {
 493			__IP6_INC_STATS(net, ip6_dst_idev(dst),
 494					IPSTATS_MIB_INDISCARDS);
 495			goto drop;
 496		}
 497	}
 498
 499	if (!xfrm6_route_forward(skb)) {
 500		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 501				IPSTATS_MIB_INDISCARDS);
 502		goto drop;
 503	}
 504	dst = skb_dst(skb);
 505
 506	/* IPv6 specs say nothing about it, but it is clear that we cannot
 507	   send redirects to source routed frames.
 508	   We don't send redirects to frames decapsulated from IPsec.
 509	 */
 510	if (skb->dev == dst->dev && opt->srcrt == 0 && !skb_sec_path(skb)) {
 
 511		struct in6_addr *target = NULL;
 512		struct inet_peer *peer;
 513		struct rt6_info *rt;
 514
 515		/*
 516		 *	incoming and outgoing devices are the same
 517		 *	send a redirect.
 518		 */
 519
 520		rt = (struct rt6_info *) dst;
 521		if (rt->rt6i_flags & RTF_GATEWAY)
 522			target = &rt->rt6i_gateway;
 523		else
 524			target = &hdr->daddr;
 525
 526		peer = inet_getpeer_v6(net->ipv6.peers, &hdr->daddr, 1);
 
 527
 528		/* Limit redirects both by destination (here)
 529		   and by source (inside ndisc_send_redirect)
 530		 */
 531		if (inet_peer_xrlim_allow(peer, 1*HZ))
 532			ndisc_send_redirect(skb, target);
 533		if (peer)
 534			inet_putpeer(peer);
 535	} else {
 536		int addrtype = ipv6_addr_type(&hdr->saddr);
 537
 538		/* This check is security critical. */
 539		if (addrtype == IPV6_ADDR_ANY ||
 540		    addrtype & (IPV6_ADDR_MULTICAST | IPV6_ADDR_LOOPBACK))
 541			goto error;
 542		if (addrtype & IPV6_ADDR_LINKLOCAL) {
 543			icmpv6_send(skb, ICMPV6_DEST_UNREACH,
 544				    ICMPV6_NOT_NEIGHBOUR, 0);
 545			goto error;
 546		}
 547	}
 548
 549	mtu = ip6_dst_mtu_forward(dst);
 
 
 550	if (mtu < IPV6_MIN_MTU)
 551		mtu = IPV6_MIN_MTU;
 552
 553	if (ip6_pkt_too_big(skb, mtu)) {
 554		/* Again, force OUTPUT device used as source address */
 555		skb->dev = dst->dev;
 556		icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
 557		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 558				IPSTATS_MIB_INTOOBIGERRORS);
 559		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 560				IPSTATS_MIB_FRAGFAILS);
 561		kfree_skb(skb);
 562		return -EMSGSIZE;
 563	}
 564
 565	if (skb_cow(skb, dst->dev->hard_header_len)) {
 566		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 567				IPSTATS_MIB_OUTDISCARDS);
 568		goto drop;
 569	}
 570
 571	hdr = ipv6_hdr(skb);
 572
 573	/* Mangling hops number delayed to point after skb COW */
 574
 575	hdr->hop_limit--;
 576
 577	return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
 578		       net, NULL, skb, skb->dev, dst->dev,
 579		       ip6_forward_finish);
 580
 581error:
 582	__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INADDRERRORS);
 
 583drop:
 584	kfree_skb(skb);
 585	return -EINVAL;
 586}
 587
 588static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
 589{
 590	to->pkt_type = from->pkt_type;
 591	to->priority = from->priority;
 592	to->protocol = from->protocol;
 593	skb_dst_drop(to);
 594	skb_dst_set(to, dst_clone(skb_dst(from)));
 595	to->dev = from->dev;
 596	to->mark = from->mark;
 597
 
 
 598#ifdef CONFIG_NET_SCHED
 599	to->tc_index = from->tc_index;
 600#endif
 601	nf_copy(to, from);
 
 602	skb_copy_secmark(to, from);
 603}
 604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 605int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
 606		 int (*output)(struct net *, struct sock *, struct sk_buff *))
 607{
 608	struct sk_buff *frag;
 609	struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
 610	struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ?
 611				inet6_sk(skb->sk) : NULL;
 612	struct ipv6hdr *tmp_hdr;
 613	struct frag_hdr *fh;
 614	unsigned int mtu, hlen, left, len;
 615	int hroom, troom;
 
 616	__be32 frag_id;
 617	int ptr, offset = 0, err = 0;
 618	u8 *prevhdr, nexthdr = 0;
 619
 620	err = ip6_find_1stfragopt(skb, &prevhdr);
 621	if (err < 0)
 622		goto fail;
 623	hlen = err;
 624	nexthdr = *prevhdr;
 
 625
 626	mtu = ip6_skb_dst_mtu(skb);
 627
 628	/* We must not fragment if the socket is set to force MTU discovery
 629	 * or if the skb it not generated by a local socket.
 630	 */
 631	if (unlikely(!skb->ignore_df && skb->len > mtu))
 632		goto fail_toobig;
 633
 634	if (IP6CB(skb)->frag_max_size) {
 635		if (IP6CB(skb)->frag_max_size > mtu)
 636			goto fail_toobig;
 637
 638		/* don't send fragments larger than what we received */
 639		mtu = IP6CB(skb)->frag_max_size;
 640		if (mtu < IPV6_MIN_MTU)
 641			mtu = IPV6_MIN_MTU;
 642	}
 643
 644	if (np && np->frag_size < mtu) {
 645		if (np->frag_size)
 646			mtu = np->frag_size;
 
 
 647	}
 648	if (mtu < hlen + sizeof(struct frag_hdr) + 8)
 649		goto fail_toobig;
 650	mtu -= hlen + sizeof(struct frag_hdr);
 651
 652	frag_id = ipv6_select_ident(net, &ipv6_hdr(skb)->daddr,
 653				    &ipv6_hdr(skb)->saddr);
 654
 655	if (skb->ip_summed == CHECKSUM_PARTIAL &&
 656	    (err = skb_checksum_help(skb)))
 657		goto fail;
 658
 
 659	hroom = LL_RESERVED_SPACE(rt->dst.dev);
 660	if (skb_has_frag_list(skb)) {
 661		unsigned int first_len = skb_pagelen(skb);
 
 662		struct sk_buff *frag2;
 663
 664		if (first_len - hlen > mtu ||
 665		    ((first_len - hlen) & 7) ||
 666		    skb_cloned(skb) ||
 667		    skb_headroom(skb) < (hroom + sizeof(struct frag_hdr)))
 668			goto slow_path;
 669
 670		skb_walk_frags(skb, frag) {
 671			/* Correct geometry. */
 672			if (frag->len > mtu ||
 673			    ((frag->len & 7) && frag->next) ||
 674			    skb_headroom(frag) < (hlen + hroom + sizeof(struct frag_hdr)))
 675				goto slow_path_clean;
 676
 677			/* Partially cloned skb? */
 678			if (skb_shared(frag))
 679				goto slow_path_clean;
 680
 681			BUG_ON(frag->sk);
 682			if (skb->sk) {
 683				frag->sk = skb->sk;
 684				frag->destructor = sock_wfree;
 685			}
 686			skb->truesize -= frag->truesize;
 687		}
 688
 689		err = 0;
 690		offset = 0;
 691		/* BUILD HEADER */
 692
 693		*prevhdr = NEXTHDR_FRAGMENT;
 694		tmp_hdr = kmemdup(skb_network_header(skb), hlen, GFP_ATOMIC);
 695		if (!tmp_hdr) {
 696			err = -ENOMEM;
 697			goto fail;
 698		}
 699		frag = skb_shinfo(skb)->frag_list;
 700		skb_frag_list_init(skb);
 701
 702		__skb_pull(skb, hlen);
 703		fh = __skb_push(skb, sizeof(struct frag_hdr));
 704		__skb_push(skb, hlen);
 705		skb_reset_network_header(skb);
 706		memcpy(skb_network_header(skb), tmp_hdr, hlen);
 707
 708		fh->nexthdr = nexthdr;
 709		fh->reserved = 0;
 710		fh->frag_off = htons(IP6_MF);
 711		fh->identification = frag_id;
 712
 713		first_len = skb_pagelen(skb);
 714		skb->data_len = first_len - skb_headlen(skb);
 715		skb->len = first_len;
 716		ipv6_hdr(skb)->payload_len = htons(first_len -
 717						   sizeof(struct ipv6hdr));
 718
 719		for (;;) {
 720			/* Prepare header of the next frame,
 721			 * before previous one went down. */
 722			if (frag) {
 723				frag->ip_summed = CHECKSUM_NONE;
 724				skb_reset_transport_header(frag);
 725				fh = __skb_push(frag, sizeof(struct frag_hdr));
 726				__skb_push(frag, hlen);
 727				skb_reset_network_header(frag);
 728				memcpy(skb_network_header(frag), tmp_hdr,
 729				       hlen);
 730				offset += skb->len - hlen - sizeof(struct frag_hdr);
 731				fh->nexthdr = nexthdr;
 732				fh->reserved = 0;
 733				fh->frag_off = htons(offset);
 734				if (frag->next)
 735					fh->frag_off |= htons(IP6_MF);
 736				fh->identification = frag_id;
 737				ipv6_hdr(frag)->payload_len =
 738						htons(frag->len -
 739						      sizeof(struct ipv6hdr));
 740				ip6_copy_metadata(frag, skb);
 741			}
 742
 
 743			err = output(net, sk, skb);
 744			if (!err)
 745				IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 746					      IPSTATS_MIB_FRAGCREATES);
 747
 748			if (err || !frag)
 749				break;
 750
 751			skb = frag;
 752			frag = skb->next;
 753			skb->next = NULL;
 754		}
 755
 756		kfree(tmp_hdr);
 757
 758		if (err == 0) {
 759			IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 760				      IPSTATS_MIB_FRAGOKS);
 
 761			return 0;
 762		}
 763
 764		kfree_skb_list(frag);
 765
 766		IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 767			      IPSTATS_MIB_FRAGFAILS);
 
 768		return err;
 769
 770slow_path_clean:
 771		skb_walk_frags(skb, frag2) {
 772			if (frag2 == frag)
 773				break;
 774			frag2->sk = NULL;
 775			frag2->destructor = NULL;
 776			skb->truesize += frag2->truesize;
 777		}
 778	}
 779
 780slow_path:
 781	left = skb->len - hlen;		/* Space per frame */
 782	ptr = hlen;			/* Where to start from */
 783
 784	/*
 785	 *	Fragment the datagram.
 786	 */
 787
 788	troom = rt->dst.dev->needed_tailroom;
 
 
 789
 790	/*
 791	 *	Keep copying data until we run out.
 792	 */
 793	while (left > 0)	{
 794		u8 *fragnexthdr_offset;
 795
 796		len = left;
 797		/* IF: it doesn't fit, use 'mtu' - the data space left */
 798		if (len > mtu)
 799			len = mtu;
 800		/* IF: we are not sending up to and including the packet end
 801		   then align the next start on an eight byte boundary */
 802		if (len < left)	{
 803			len &= ~7;
 804		}
 805
 806		/* Allocate buffer */
 807		frag = alloc_skb(len + hlen + sizeof(struct frag_hdr) +
 808				 hroom + troom, GFP_ATOMIC);
 809		if (!frag) {
 810			err = -ENOMEM;
 811			goto fail;
 812		}
 813
 814		/*
 815		 *	Set up data on packet
 816		 */
 817
 818		ip6_copy_metadata(frag, skb);
 819		skb_reserve(frag, hroom);
 820		skb_put(frag, len + hlen + sizeof(struct frag_hdr));
 821		skb_reset_network_header(frag);
 822		fh = (struct frag_hdr *)(skb_network_header(frag) + hlen);
 823		frag->transport_header = (frag->network_header + hlen +
 824					  sizeof(struct frag_hdr));
 825
 826		/*
 827		 *	Charge the memory for the fragment to any owner
 828		 *	it might possess
 829		 */
 830		if (skb->sk)
 831			skb_set_owner_w(frag, skb->sk);
 832
 833		/*
 834		 *	Copy the packet header into the new buffer.
 835		 */
 836		skb_copy_from_linear_data(skb, skb_network_header(frag), hlen);
 837
 838		fragnexthdr_offset = skb_network_header(frag);
 839		fragnexthdr_offset += prevhdr - skb_network_header(skb);
 840		*fragnexthdr_offset = NEXTHDR_FRAGMENT;
 841
 842		/*
 843		 *	Build fragment header.
 844		 */
 845		fh->nexthdr = nexthdr;
 846		fh->reserved = 0;
 847		fh->identification = frag_id;
 848
 849		/*
 850		 *	Copy a block of the IP datagram.
 851		 */
 852		BUG_ON(skb_copy_bits(skb, ptr, skb_transport_header(frag),
 853				     len));
 854		left -= len;
 855
 856		fh->frag_off = htons(offset);
 857		if (left > 0)
 858			fh->frag_off |= htons(IP6_MF);
 859		ipv6_hdr(frag)->payload_len = htons(frag->len -
 860						    sizeof(struct ipv6hdr));
 861
 862		ptr += len;
 863		offset += len;
 864
 865		/*
 866		 *	Put this fragment into the sending queue.
 867		 */
 
 868		err = output(net, sk, frag);
 869		if (err)
 870			goto fail;
 871
 872		IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 873			      IPSTATS_MIB_FRAGCREATES);
 874	}
 875	IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 876		      IPSTATS_MIB_FRAGOKS);
 877	consume_skb(skb);
 878	return err;
 879
 880fail_toobig:
 881	if (skb->sk && dst_allfrag(skb_dst(skb)))
 882		sk_nocaps_add(skb->sk, NETIF_F_GSO_MASK);
 883
 884	icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
 885	err = -EMSGSIZE;
 886
 887fail:
 888	IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 889		      IPSTATS_MIB_FRAGFAILS);
 890	kfree_skb(skb);
 891	return err;
 892}
 893
 894static inline int ip6_rt_check(const struct rt6key *rt_key,
 895			       const struct in6_addr *fl_addr,
 896			       const struct in6_addr *addr_cache)
 897{
 898	return (rt_key->plen != 128 || !ipv6_addr_equal(fl_addr, &rt_key->addr)) &&
 899		(!addr_cache || !ipv6_addr_equal(fl_addr, addr_cache));
 900}
 901
 902static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
 903					  struct dst_entry *dst,
 904					  const struct flowi6 *fl6)
 905{
 906	struct ipv6_pinfo *np = inet6_sk(sk);
 907	struct rt6_info *rt;
 908
 909	if (!dst)
 910		goto out;
 911
 912	if (dst->ops->family != AF_INET6) {
 913		dst_release(dst);
 914		return NULL;
 915	}
 916
 917	rt = (struct rt6_info *)dst;
 918	/* Yes, checking route validity in not connected
 919	 * case is not very simple. Take into account,
 920	 * that we do not support routing by source, TOS,
 921	 * and MSG_DONTROUTE		--ANK (980726)
 922	 *
 923	 * 1. ip6_rt_check(): If route was host route,
 924	 *    check that cached destination is current.
 925	 *    If it is network route, we still may
 926	 *    check its validity using saved pointer
 927	 *    to the last used address: daddr_cache.
 928	 *    We do not want to save whole address now,
 929	 *    (because main consumer of this service
 930	 *    is tcp, which has not this problem),
 931	 *    so that the last trick works only on connected
 932	 *    sockets.
 933	 * 2. oif also should be the same.
 934	 */
 935	if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr, np->daddr_cache) ||
 936#ifdef CONFIG_IPV6_SUBTREES
 937	    ip6_rt_check(&rt->rt6i_src, &fl6->saddr, np->saddr_cache) ||
 938#endif
 939	   (!(fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) &&
 940	      (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex))) {
 941		dst_release(dst);
 942		dst = NULL;
 943	}
 944
 945out:
 946	return dst;
 947}
 948
 949static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
 950			       struct dst_entry **dst, struct flowi6 *fl6)
 951{
 952#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
 953	struct neighbour *n;
 954	struct rt6_info *rt;
 955#endif
 956	int err;
 957	int flags = 0;
 958
 959	/* The correct way to handle this would be to do
 960	 * ip6_route_get_saddr, and then ip6_route_output; however,
 961	 * the route-specific preferred source forces the
 962	 * ip6_route_output call _before_ ip6_route_get_saddr.
 963	 *
 964	 * In source specific routing (no src=any default route),
 965	 * ip6_route_output will fail given src=any saddr, though, so
 966	 * that's why we try it again later.
 967	 */
 968	if (ipv6_addr_any(&fl6->saddr) && (!*dst || !(*dst)->error)) {
 
 969		struct rt6_info *rt;
 970		bool had_dst = *dst != NULL;
 971
 972		if (!had_dst)
 973			*dst = ip6_route_output(net, sk, fl6);
 974		rt = (*dst)->error ? NULL : (struct rt6_info *)*dst;
 975		err = ip6_route_get_saddr(net, rt, &fl6->daddr,
 976					  sk ? inet6_sk(sk)->srcprefs : 0,
 
 
 
 977					  &fl6->saddr);
 
 
 978		if (err)
 979			goto out_err_release;
 980
 981		/* If we had an erroneous initial result, pretend it
 982		 * never existed and let the SA-enabled version take
 983		 * over.
 984		 */
 985		if (!had_dst && (*dst)->error) {
 986			dst_release(*dst);
 987			*dst = NULL;
 988		}
 989
 990		if (fl6->flowi6_oif)
 991			flags |= RT6_LOOKUP_F_IFACE;
 992	}
 993
 994	if (!*dst)
 995		*dst = ip6_route_output_flags(net, sk, fl6, flags);
 996
 997	err = (*dst)->error;
 998	if (err)
 999		goto out_err_release;
1000
1001#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1002	/*
1003	 * Here if the dst entry we've looked up
1004	 * has a neighbour entry that is in the INCOMPLETE
1005	 * state and the src address from the flow is
1006	 * marked as OPTIMISTIC, we release the found
1007	 * dst entry and replace it instead with the
1008	 * dst entry of the nexthop router
1009	 */
1010	rt = (struct rt6_info *) *dst;
1011	rcu_read_lock_bh();
1012	n = __ipv6_neigh_lookup_noref(rt->dst.dev,
1013				      rt6_nexthop(rt, &fl6->daddr));
1014	err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0;
1015	rcu_read_unlock_bh();
1016
1017	if (err) {
1018		struct inet6_ifaddr *ifp;
1019		struct flowi6 fl_gw6;
1020		int redirect;
1021
1022		ifp = ipv6_get_ifaddr(net, &fl6->saddr,
1023				      (*dst)->dev, 1);
1024
1025		redirect = (ifp && ifp->flags & IFA_F_OPTIMISTIC);
1026		if (ifp)
1027			in6_ifa_put(ifp);
1028
1029		if (redirect) {
1030			/*
1031			 * We need to get the dst entry for the
1032			 * default router instead
1033			 */
1034			dst_release(*dst);
1035			memcpy(&fl_gw6, fl6, sizeof(struct flowi6));
1036			memset(&fl_gw6.daddr, 0, sizeof(struct in6_addr));
1037			*dst = ip6_route_output(net, sk, &fl_gw6);
1038			err = (*dst)->error;
1039			if (err)
1040				goto out_err_release;
1041		}
1042	}
1043#endif
1044	if (ipv6_addr_v4mapped(&fl6->saddr) &&
1045	    !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr))) {
1046		err = -EAFNOSUPPORT;
1047		goto out_err_release;
1048	}
1049
1050	return 0;
1051
1052out_err_release:
1053	dst_release(*dst);
1054	*dst = NULL;
1055
1056	if (err == -ENETUNREACH)
1057		IP6_INC_STATS(net, NULL, IPSTATS_MIB_OUTNOROUTES);
1058	return err;
1059}
1060
1061/**
1062 *	ip6_dst_lookup - perform route lookup on flow
 
1063 *	@sk: socket which provides route info
1064 *	@dst: pointer to dst_entry * for result
1065 *	@fl6: flow to lookup
1066 *
1067 *	This function performs a route lookup on the given flow.
1068 *
1069 *	It returns zero on success, or a standard errno code on error.
1070 */
1071int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst,
1072		   struct flowi6 *fl6)
1073{
1074	*dst = NULL;
1075	return ip6_dst_lookup_tail(net, sk, dst, fl6);
1076}
1077EXPORT_SYMBOL_GPL(ip6_dst_lookup);
1078
1079/**
1080 *	ip6_dst_lookup_flow - perform route lookup on flow with ipsec
 
1081 *	@sk: socket which provides route info
1082 *	@fl6: flow to lookup
1083 *	@final_dst: final destination address for ipsec lookup
1084 *
1085 *	This function performs a route lookup on the given flow.
1086 *
1087 *	It returns a valid dst pointer on success, or a pointer encoded
1088 *	error code.
1089 */
1090struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6,
1091				      const struct in6_addr *final_dst)
1092{
1093	struct dst_entry *dst = NULL;
1094	int err;
1095
1096	err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6);
1097	if (err)
1098		return ERR_PTR(err);
1099	if (final_dst)
1100		fl6->daddr = *final_dst;
1101
1102	return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1103}
1104EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
1105
1106/**
1107 *	ip6_sk_dst_lookup_flow - perform socket cached route lookup on flow
1108 *	@sk: socket which provides the dst cache and route info
1109 *	@fl6: flow to lookup
1110 *	@final_dst: final destination address for ipsec lookup
1111 *	@connected: whether @sk is connected or not
1112 *
1113 *	This function performs a route lookup on the given flow with the
1114 *	possibility of using the cached route in the socket if it is valid.
1115 *	It will take the socket dst lock when operating on the dst cache.
1116 *	As a result, this function can only be used in process context.
1117 *
1118 *	In addition, for a connected socket, cache the dst in the socket
1119 *	if the current cache is not valid.
1120 *
1121 *	It returns a valid dst pointer on success, or a pointer encoded
1122 *	error code.
1123 */
1124struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1125					 const struct in6_addr *final_dst,
1126					 bool connected)
1127{
1128	struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
1129
1130	dst = ip6_sk_dst_check(sk, dst, fl6);
1131	if (dst)
1132		return dst;
1133
1134	dst = ip6_dst_lookup_flow(sk, fl6, final_dst);
1135	if (connected && !IS_ERR(dst))
1136		ip6_sk_dst_store_flow(sk, dst_clone(dst), fl6);
1137
1138	return dst;
1139}
1140EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
1141
1142static inline struct ipv6_opt_hdr *ip6_opt_dup(struct ipv6_opt_hdr *src,
1143					       gfp_t gfp)
1144{
1145	return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1146}
1147
1148static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
1149						gfp_t gfp)
1150{
1151	return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1152}
1153
1154static void ip6_append_data_mtu(unsigned int *mtu,
1155				int *maxfraglen,
1156				unsigned int fragheaderlen,
1157				struct sk_buff *skb,
1158				struct rt6_info *rt,
1159				unsigned int orig_mtu)
1160{
1161	if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1162		if (!skb) {
1163			/* first fragment, reserve header_len */
1164			*mtu = orig_mtu - rt->dst.header_len;
1165
1166		} else {
1167			/*
1168			 * this fragment is not first, the headers
1169			 * space is regarded as data space.
1170			 */
1171			*mtu = orig_mtu;
1172		}
1173		*maxfraglen = ((*mtu - fragheaderlen) & ~7)
1174			      + fragheaderlen - sizeof(struct frag_hdr);
1175	}
1176}
1177
1178static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
1179			  struct inet6_cork *v6_cork, struct ipcm6_cookie *ipc6,
1180			  struct rt6_info *rt, struct flowi6 *fl6)
1181{
1182	struct ipv6_pinfo *np = inet6_sk(sk);
1183	unsigned int mtu;
1184	struct ipv6_txoptions *opt = ipc6->opt;
 
 
 
 
 
1185
1186	/*
1187	 * setup for corking
1188	 */
1189	if (opt) {
1190		if (WARN_ON(v6_cork->opt))
1191			return -EINVAL;
1192
1193		v6_cork->opt = kzalloc(sizeof(*opt), sk->sk_allocation);
1194		if (unlikely(!v6_cork->opt))
1195			return -ENOBUFS;
1196
1197		v6_cork->opt->tot_len = sizeof(*opt);
1198		v6_cork->opt->opt_flen = opt->opt_flen;
1199		v6_cork->opt->opt_nflen = opt->opt_nflen;
1200
1201		v6_cork->opt->dst0opt = ip6_opt_dup(opt->dst0opt,
1202						    sk->sk_allocation);
1203		if (opt->dst0opt && !v6_cork->opt->dst0opt)
1204			return -ENOBUFS;
1205
1206		v6_cork->opt->dst1opt = ip6_opt_dup(opt->dst1opt,
1207						    sk->sk_allocation);
1208		if (opt->dst1opt && !v6_cork->opt->dst1opt)
1209			return -ENOBUFS;
1210
1211		v6_cork->opt->hopopt = ip6_opt_dup(opt->hopopt,
1212						   sk->sk_allocation);
1213		if (opt->hopopt && !v6_cork->opt->hopopt)
1214			return -ENOBUFS;
1215
1216		v6_cork->opt->srcrt = ip6_rthdr_dup(opt->srcrt,
1217						    sk->sk_allocation);
1218		if (opt->srcrt && !v6_cork->opt->srcrt)
1219			return -ENOBUFS;
1220
1221		/* need source address above miyazawa*/
1222	}
1223	dst_hold(&rt->dst);
1224	cork->base.dst = &rt->dst;
1225	cork->fl.u.ip6 = *fl6;
1226	v6_cork->hop_limit = ipc6->hlimit;
1227	v6_cork->tclass = ipc6->tclass;
1228	if (rt->dst.flags & DST_XFRM_TUNNEL)
1229		mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
1230		      READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
1231	else
1232		mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
1233			READ_ONCE(rt->dst.dev->mtu) : dst_mtu(xfrm_dst_path(&rt->dst));
1234	if (np->frag_size < mtu) {
1235		if (np->frag_size)
1236			mtu = np->frag_size;
1237	}
1238	if (mtu < IPV6_MIN_MTU)
1239		return -EINVAL;
1240	cork->base.fragsize = mtu;
1241	if (dst_allfrag(xfrm_dst_path(&rt->dst)))
1242		cork->base.flags |= IPCORK_ALLFRAG;
 
 
 
 
 
 
1243	cork->base.length = 0;
 
1244
1245	return 0;
1246}
1247
1248static int __ip6_append_data(struct sock *sk,
1249			     struct flowi6 *fl6,
1250			     struct sk_buff_head *queue,
1251			     struct inet_cork *cork,
1252			     struct inet6_cork *v6_cork,
1253			     struct page_frag *pfrag,
1254			     int getfrag(void *from, char *to, int offset,
1255					 int len, int odd, struct sk_buff *skb),
1256			     void *from, int length, int transhdrlen,
1257			     unsigned int flags, struct ipcm6_cookie *ipc6,
1258			     const struct sockcm_cookie *sockc)
1259{
1260	struct sk_buff *skb, *skb_prev = NULL;
 
 
1261	unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu, pmtu;
 
1262	int exthdrlen = 0;
1263	int dst_exthdrlen = 0;
1264	int hh_len;
1265	int copy;
1266	int err;
1267	int offset = 0;
1268	__u8 tx_flags = 0;
1269	u32 tskey = 0;
1270	struct rt6_info *rt = (struct rt6_info *)cork->dst;
 
1271	struct ipv6_txoptions *opt = v6_cork->opt;
1272	int csummode = CHECKSUM_NONE;
1273	unsigned int maxnonfragsize, headersize;
1274	unsigned int wmem_alloc_delta = 0;
1275
1276	skb = skb_peek_tail(queue);
1277	if (!skb) {
1278		exthdrlen = opt ? opt->opt_flen : 0;
1279		dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
1280	}
1281
1282	mtu = cork->fragsize;
 
1283	orig_mtu = mtu;
1284
1285	hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1286
1287	fragheaderlen = sizeof(struct ipv6hdr) + rt->rt6i_nfheader_len +
1288			(opt ? opt->opt_nflen : 0);
1289	maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen -
1290		     sizeof(struct frag_hdr);
1291
1292	headersize = sizeof(struct ipv6hdr) +
1293		     (opt ? opt->opt_flen + opt->opt_nflen : 0) +
1294		     (dst_allfrag(&rt->dst) ?
1295		      sizeof(struct frag_hdr) : 0) +
1296		     rt->rt6i_nfheader_len;
1297
 
 
 
 
 
 
 
1298	/* as per RFC 7112 section 5, the entire IPv6 Header Chain must fit
1299	 * the first fragment
1300	 */
1301	if (headersize + transhdrlen > mtu)
1302		goto emsgsize;
1303
1304	if (cork->length + length > mtu - headersize && ipc6->dontfrag &&
1305	    (sk->sk_protocol == IPPROTO_UDP ||
 
1306	     sk->sk_protocol == IPPROTO_RAW)) {
1307		ipv6_local_rxpmtu(sk, fl6, mtu - headersize +
1308				sizeof(struct ipv6hdr));
1309		goto emsgsize;
1310	}
1311
1312	if (ip6_sk_ignore_df(sk))
1313		maxnonfragsize = sizeof(struct ipv6hdr) + IPV6_MAXPLEN;
1314	else
1315		maxnonfragsize = mtu;
1316
1317	if (cork->length + length > maxnonfragsize - headersize) {
1318emsgsize:
1319		pmtu = max_t(int, mtu - headersize + sizeof(struct ipv6hdr), 0);
1320		ipv6_local_error(sk, EMSGSIZE, fl6, pmtu);
1321		return -EMSGSIZE;
1322	}
1323
1324	/* CHECKSUM_PARTIAL only with no extension headers and when
1325	 * we are not going to fragment
1326	 */
1327	if (transhdrlen && sk->sk_protocol == IPPROTO_UDP &&
1328	    headersize == sizeof(struct ipv6hdr) &&
1329	    length <= mtu - headersize &&
1330	    !(flags & MSG_MORE) &&
1331	    rt->dst.dev->features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))
1332		csummode = CHECKSUM_PARTIAL;
1333
1334	if (sk->sk_type == SOCK_DGRAM || sk->sk_type == SOCK_RAW) {
1335		sock_tx_timestamp(sk, sockc->tsflags, &tx_flags);
1336		if (tx_flags & SKBTX_ANY_SW_TSTAMP &&
1337		    sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)
1338			tskey = sk->sk_tskey++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1339	}
1340
1341	/*
1342	 * Let's try using as much space as possible.
1343	 * Use MTU if total length of the message fits into the MTU.
1344	 * Otherwise, we need to reserve fragment header and
1345	 * fragment alignment (= 8-15 octects, in total).
1346	 *
1347	 * Note that we may need to "move" the data from the tail of
1348	 * of the buffer to the new fragment when we split
1349	 * the message.
1350	 *
1351	 * FIXME: It may be fragmented into multiple chunks
1352	 *        at once if non-fragmentable extension headers
1353	 *        are too large.
1354	 * --yoshfuji
1355	 */
1356
1357	cork->length += length;
1358	if (!skb)
1359		goto alloc_new_skb;
1360
1361	while (length > 0) {
1362		/* Check if the remaining data fits into current packet. */
1363		copy = (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - skb->len;
1364		if (copy < length)
1365			copy = maxfraglen - skb->len;
1366
1367		if (copy <= 0) {
1368			char *data;
1369			unsigned int datalen;
1370			unsigned int fraglen;
1371			unsigned int fraggap;
1372			unsigned int alloclen;
 
1373alloc_new_skb:
1374			/* There's no room in the current skb */
1375			if (skb)
1376				fraggap = skb->len - maxfraglen;
1377			else
1378				fraggap = 0;
1379			/* update mtu and maxfraglen if necessary */
1380			if (!skb || !skb_prev)
1381				ip6_append_data_mtu(&mtu, &maxfraglen,
1382						    fragheaderlen, skb, rt,
1383						    orig_mtu);
1384
1385			skb_prev = skb;
1386
1387			/*
1388			 * If remaining data exceeds the mtu,
1389			 * we know we need more fragment(s).
1390			 */
1391			datalen = length + fraggap;
1392
1393			if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
1394				datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
 
 
 
 
 
 
 
 
 
 
 
 
 
1395			if ((flags & MSG_MORE) &&
1396			    !(rt->dst.dev->features&NETIF_F_SG))
1397				alloclen = mtu;
1398			else
1399				alloclen = datalen + fragheaderlen;
1400
1401			alloclen += dst_exthdrlen;
 
 
 
 
 
1402
1403			if (datalen != length + fraggap) {
1404				/*
1405				 * this is not the last fragment, the trailer
1406				 * space is regarded as data space.
1407				 */
1408				datalen += rt->dst.trailer_len;
1409			}
1410
1411			alloclen += rt->dst.trailer_len;
1412			fraglen = datalen + fragheaderlen;
1413
1414			/*
1415			 * We just reserve space for fragment header.
1416			 * Note: this may be overallocation if the message
1417			 * (without MSG_MORE) fits into the MTU.
1418			 */
1419			alloclen += sizeof(struct frag_hdr);
1420
1421			copy = datalen - transhdrlen - fraggap;
1422			if (copy < 0) {
1423				err = -EINVAL;
1424				goto error;
1425			}
1426			if (transhdrlen) {
1427				skb = sock_alloc_send_skb(sk,
1428						alloclen + hh_len,
1429						(flags & MSG_DONTWAIT), &err);
1430			} else {
1431				skb = NULL;
1432				if (refcount_read(&sk->sk_wmem_alloc) + wmem_alloc_delta <=
1433				    2 * sk->sk_sndbuf)
1434					skb = alloc_skb(alloclen + hh_len,
1435							sk->sk_allocation);
1436				if (unlikely(!skb))
1437					err = -ENOBUFS;
1438			}
1439			if (!skb)
1440				goto error;
1441			/*
1442			 *	Fill in the control structures
1443			 */
1444			skb->protocol = htons(ETH_P_IPV6);
1445			skb->ip_summed = csummode;
1446			skb->csum = 0;
1447			/* reserve for fragmentation and ipsec header */
1448			skb_reserve(skb, hh_len + sizeof(struct frag_hdr) +
1449				    dst_exthdrlen);
1450
1451			/* Only the initial fragment is time stamped */
1452			skb_shinfo(skb)->tx_flags = tx_flags;
1453			tx_flags = 0;
1454			skb_shinfo(skb)->tskey = tskey;
1455			tskey = 0;
1456
1457			/*
1458			 *	Find where to start putting bytes
1459			 */
1460			data = skb_put(skb, fraglen);
1461			skb_set_network_header(skb, exthdrlen);
1462			data += fragheaderlen;
1463			skb->transport_header = (skb->network_header +
1464						 fragheaderlen);
1465			if (fraggap) {
1466				skb->csum = skb_copy_and_csum_bits(
1467					skb_prev, maxfraglen,
1468					data + transhdrlen, fraggap, 0);
1469				skb_prev->csum = csum_sub(skb_prev->csum,
1470							  skb->csum);
1471				data += fraggap;
1472				pskb_trim_unique(skb_prev, maxfraglen);
1473			}
1474			if (copy > 0 &&
1475			    getfrag(from, data + transhdrlen, offset,
1476				    copy, fraggap, skb) < 0) {
1477				err = -EFAULT;
1478				kfree_skb(skb);
1479				goto error;
 
 
1480			}
1481
1482			offset += copy;
1483			length -= datalen - fraggap;
1484			transhdrlen = 0;
1485			exthdrlen = 0;
1486			dst_exthdrlen = 0;
1487
 
 
 
 
 
 
 
1488			if ((flags & MSG_CONFIRM) && !skb_prev)
1489				skb_set_dst_pending_confirm(skb, 1);
1490
1491			/*
1492			 * Put the packet on the pending queue
1493			 */
1494			if (!skb->destructor) {
1495				skb->destructor = sock_wfree;
1496				skb->sk = sk;
1497				wmem_alloc_delta += skb->truesize;
1498			}
1499			__skb_queue_tail(queue, skb);
1500			continue;
1501		}
1502
1503		if (copy > length)
1504			copy = length;
1505
1506		if (!(rt->dst.dev->features&NETIF_F_SG) &&
1507		    skb_tailroom(skb) >= copy) {
1508			unsigned int off;
1509
1510			off = skb->len;
1511			if (getfrag(from, skb_put(skb, copy),
1512						offset, copy, off, skb) < 0) {
1513				__skb_trim(skb, off);
1514				err = -EFAULT;
1515				goto error;
1516			}
1517		} else {
 
 
 
 
 
 
 
 
 
 
 
 
 
1518			int i = skb_shinfo(skb)->nr_frags;
1519
1520			err = -ENOMEM;
1521			if (!sk_page_frag_refill(sk, pfrag))
1522				goto error;
1523
 
1524			if (!skb_can_coalesce(skb, i, pfrag->page,
1525					      pfrag->offset)) {
1526				err = -EMSGSIZE;
1527				if (i == MAX_SKB_FRAGS)
1528					goto error;
1529
1530				__skb_fill_page_desc(skb, i, pfrag->page,
1531						     pfrag->offset, 0);
1532				skb_shinfo(skb)->nr_frags = ++i;
1533				get_page(pfrag->page);
1534			}
1535			copy = min_t(int, copy, pfrag->size - pfrag->offset);
1536			if (getfrag(from,
1537				    page_address(pfrag->page) + pfrag->offset,
1538				    offset, copy, skb->len, skb) < 0)
1539				goto error_efault;
1540
1541			pfrag->offset += copy;
1542			skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
1543			skb->len += copy;
1544			skb->data_len += copy;
1545			skb->truesize += copy;
1546			wmem_alloc_delta += copy;
 
 
 
 
1547		}
1548		offset += copy;
1549		length -= copy;
1550	}
1551
1552	if (wmem_alloc_delta)
1553		refcount_add(wmem_alloc_delta, &sk->sk_wmem_alloc);
1554	return 0;
1555
1556error_efault:
1557	err = -EFAULT;
1558error:
 
1559	cork->length -= length;
1560	IP6_INC_STATS(sock_net(sk), rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS);
1561	refcount_add(wmem_alloc_delta, &sk->sk_wmem_alloc);
 
 
1562	return err;
1563}
1564
1565int ip6_append_data(struct sock *sk,
1566		    int getfrag(void *from, char *to, int offset, int len,
1567				int odd, struct sk_buff *skb),
1568		    void *from, int length, int transhdrlen,
1569		    struct ipcm6_cookie *ipc6, struct flowi6 *fl6,
1570		    struct rt6_info *rt, unsigned int flags,
1571		    const struct sockcm_cookie *sockc)
1572{
1573	struct inet_sock *inet = inet_sk(sk);
1574	struct ipv6_pinfo *np = inet6_sk(sk);
1575	int exthdrlen;
1576	int err;
1577
1578	if (flags&MSG_PROBE)
1579		return 0;
1580	if (skb_queue_empty(&sk->sk_write_queue)) {
1581		/*
1582		 * setup for corking
1583		 */
 
1584		err = ip6_setup_cork(sk, &inet->cork, &np->cork,
1585				     ipc6, rt, fl6);
1586		if (err)
1587			return err;
1588
 
1589		exthdrlen = (ipc6->opt ? ipc6->opt->opt_flen : 0);
1590		length += exthdrlen;
1591		transhdrlen += exthdrlen;
1592	} else {
1593		fl6 = &inet->cork.fl.u.ip6;
1594		transhdrlen = 0;
1595	}
1596
1597	return __ip6_append_data(sk, fl6, &sk->sk_write_queue, &inet->cork.base,
1598				 &np->cork, sk_page_frag(sk), getfrag,
1599				 from, length, transhdrlen, flags, ipc6, sockc);
1600}
1601EXPORT_SYMBOL_GPL(ip6_append_data);
1602
 
 
 
 
 
 
 
 
1603static void ip6_cork_release(struct inet_cork_full *cork,
1604			     struct inet6_cork *v6_cork)
1605{
1606	if (v6_cork->opt) {
1607		kfree(v6_cork->opt->dst0opt);
1608		kfree(v6_cork->opt->dst1opt);
1609		kfree(v6_cork->opt->hopopt);
1610		kfree(v6_cork->opt->srcrt);
1611		kfree(v6_cork->opt);
 
 
1612		v6_cork->opt = NULL;
1613	}
1614
1615	if (cork->base.dst) {
1616		dst_release(cork->base.dst);
1617		cork->base.dst = NULL;
1618		cork->base.flags &= ~IPCORK_ALLFRAG;
1619	}
1620	memset(&cork->fl, 0, sizeof(cork->fl));
1621}
1622
1623struct sk_buff *__ip6_make_skb(struct sock *sk,
1624			       struct sk_buff_head *queue,
1625			       struct inet_cork_full *cork,
1626			       struct inet6_cork *v6_cork)
1627{
1628	struct sk_buff *skb, *tmp_skb;
1629	struct sk_buff **tail_skb;
1630	struct in6_addr final_dst_buf, *final_dst = &final_dst_buf;
1631	struct ipv6_pinfo *np = inet6_sk(sk);
1632	struct net *net = sock_net(sk);
1633	struct ipv6hdr *hdr;
1634	struct ipv6_txoptions *opt = v6_cork->opt;
1635	struct rt6_info *rt = (struct rt6_info *)cork->base.dst;
1636	struct flowi6 *fl6 = &cork->fl.u.ip6;
1637	unsigned char proto = fl6->flowi6_proto;
1638
1639	skb = __skb_dequeue(queue);
1640	if (!skb)
1641		goto out;
1642	tail_skb = &(skb_shinfo(skb)->frag_list);
1643
1644	/* move skb->data to ip header from ext header */
1645	if (skb->data < skb_network_header(skb))
1646		__skb_pull(skb, skb_network_offset(skb));
1647	while ((tmp_skb = __skb_dequeue(queue)) != NULL) {
1648		__skb_pull(tmp_skb, skb_network_header_len(skb));
1649		*tail_skb = tmp_skb;
1650		tail_skb = &(tmp_skb->next);
1651		skb->len += tmp_skb->len;
1652		skb->data_len += tmp_skb->len;
1653		skb->truesize += tmp_skb->truesize;
1654		tmp_skb->destructor = NULL;
1655		tmp_skb->sk = NULL;
1656	}
1657
1658	/* Allow local fragmentation. */
1659	skb->ignore_df = ip6_sk_ignore_df(sk);
1660
1661	*final_dst = fl6->daddr;
1662	__skb_pull(skb, skb_network_header_len(skb));
 
 
1663	if (opt && opt->opt_flen)
1664		ipv6_push_frag_opts(skb, opt, &proto);
1665	if (opt && opt->opt_nflen)
1666		ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst, &fl6->saddr);
1667
1668	skb_push(skb, sizeof(struct ipv6hdr));
1669	skb_reset_network_header(skb);
1670	hdr = ipv6_hdr(skb);
1671
1672	ip6_flow_hdr(hdr, v6_cork->tclass,
1673		     ip6_make_flowlabel(net, skb, fl6->flowlabel,
1674					ip6_autoflowlabel(net, np), fl6));
1675	hdr->hop_limit = v6_cork->hop_limit;
1676	hdr->nexthdr = proto;
1677	hdr->saddr = fl6->saddr;
1678	hdr->daddr = *final_dst;
1679
1680	skb->priority = sk->sk_priority;
1681	skb->mark = sk->sk_mark;
 
 
 
 
1682
1683	skb_dst_set(skb, dst_clone(&rt->dst));
1684	IP6_UPD_PO_STATS(net, rt->rt6i_idev, IPSTATS_MIB_OUT, skb->len);
1685	if (proto == IPPROTO_ICMPV6) {
1686		struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
 
1687
1688		ICMP6MSGOUT_INC_STATS(net, idev, icmp6_hdr(skb)->icmp6_type);
 
 
 
 
 
1689		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
1690	}
1691
1692	ip6_cork_release(cork, v6_cork);
1693out:
1694	return skb;
1695}
1696
1697int ip6_send_skb(struct sk_buff *skb)
1698{
1699	struct net *net = sock_net(skb->sk);
1700	struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
1701	int err;
1702
 
1703	err = ip6_local_out(net, skb->sk, skb);
1704	if (err) {
1705		if (err > 0)
1706			err = net_xmit_errno(err);
1707		if (err)
1708			IP6_INC_STATS(net, rt->rt6i_idev,
1709				      IPSTATS_MIB_OUTDISCARDS);
1710	}
1711
 
1712	return err;
1713}
1714
1715int ip6_push_pending_frames(struct sock *sk)
1716{
1717	struct sk_buff *skb;
1718
1719	skb = ip6_finish_skb(sk);
1720	if (!skb)
1721		return 0;
1722
1723	return ip6_send_skb(skb);
1724}
1725EXPORT_SYMBOL_GPL(ip6_push_pending_frames);
1726
1727static void __ip6_flush_pending_frames(struct sock *sk,
1728				       struct sk_buff_head *queue,
1729				       struct inet_cork_full *cork,
1730				       struct inet6_cork *v6_cork)
1731{
1732	struct sk_buff *skb;
1733
1734	while ((skb = __skb_dequeue_tail(queue)) != NULL) {
1735		if (skb_dst(skb))
1736			IP6_INC_STATS(sock_net(sk), ip6_dst_idev(skb_dst(skb)),
1737				      IPSTATS_MIB_OUTDISCARDS);
1738		kfree_skb(skb);
1739	}
1740
1741	ip6_cork_release(cork, v6_cork);
1742}
1743
1744void ip6_flush_pending_frames(struct sock *sk)
1745{
1746	__ip6_flush_pending_frames(sk, &sk->sk_write_queue,
1747				   &inet_sk(sk)->cork, &inet6_sk(sk)->cork);
1748}
1749EXPORT_SYMBOL_GPL(ip6_flush_pending_frames);
1750
1751struct sk_buff *ip6_make_skb(struct sock *sk,
1752			     int getfrag(void *from, char *to, int offset,
1753					 int len, int odd, struct sk_buff *skb),
1754			     void *from, int length, int transhdrlen,
1755			     struct ipcm6_cookie *ipc6, struct flowi6 *fl6,
1756			     struct rt6_info *rt, unsigned int flags,
1757			     const struct sockcm_cookie *sockc)
1758{
1759	struct inet_cork_full cork;
1760	struct inet6_cork v6_cork;
1761	struct sk_buff_head queue;
1762	int exthdrlen = (ipc6->opt ? ipc6->opt->opt_flen : 0);
1763	int err;
1764
1765	if (flags & MSG_PROBE)
 
1766		return NULL;
 
1767
1768	__skb_queue_head_init(&queue);
1769
1770	cork.base.flags = 0;
1771	cork.base.addr = 0;
1772	cork.base.opt = NULL;
1773	cork.base.dst = NULL;
1774	v6_cork.opt = NULL;
1775	err = ip6_setup_cork(sk, &cork, &v6_cork, ipc6, rt, fl6);
1776	if (err) {
1777		ip6_cork_release(&cork, &v6_cork);
1778		return ERR_PTR(err);
1779	}
1780	if (ipc6->dontfrag < 0)
1781		ipc6->dontfrag = inet6_sk(sk)->dontfrag;
1782
1783	err = __ip6_append_data(sk, fl6, &queue, &cork.base, &v6_cork,
1784				&current->task_frag, getfrag, from,
1785				length + exthdrlen, transhdrlen + exthdrlen,
1786				flags, ipc6, sockc);
1787	if (err) {
1788		__ip6_flush_pending_frames(sk, &queue, &cork, &v6_cork);
1789		return ERR_PTR(err);
1790	}
1791
1792	return __ip6_make_skb(sk, &queue, &cork, &v6_cork);
1793}
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *	IPv6 output functions
   4 *	Linux INET6 implementation
   5 *
   6 *	Authors:
   7 *	Pedro Roque		<roque@di.fc.ul.pt>
   8 *
   9 *	Based on linux/net/ipv4/ip_output.c
  10 *
 
 
 
 
 
  11 *	Changes:
  12 *	A.N.Kuznetsov	:	airthmetics in fragmentation.
  13 *				extension headers are implemented.
  14 *				route changes now work.
  15 *				ip6_forward does not confuse sniffers.
  16 *				etc.
  17 *
  18 *      H. von Brand    :       Added missing #include <linux/string.h>
  19 *	Imran Patel	:	frag id should be in NBO
  20 *      Kazunori MIYAZAWA @USAGI
  21 *			:       add ip6_append_data and related functions
  22 *				for datagram xmit
  23 */
  24
  25#include <linux/errno.h>
  26#include <linux/kernel.h>
  27#include <linux/string.h>
  28#include <linux/socket.h>
  29#include <linux/net.h>
  30#include <linux/netdevice.h>
  31#include <linux/if_arp.h>
  32#include <linux/in6.h>
  33#include <linux/tcp.h>
  34#include <linux/route.h>
  35#include <linux/module.h>
  36#include <linux/slab.h>
  37
  38#include <linux/bpf-cgroup.h>
  39#include <linux/netfilter.h>
  40#include <linux/netfilter_ipv6.h>
  41
  42#include <net/sock.h>
  43#include <net/snmp.h>
  44
  45#include <net/gso.h>
  46#include <net/ipv6.h>
  47#include <net/ndisc.h>
  48#include <net/protocol.h>
  49#include <net/ip6_route.h>
  50#include <net/addrconf.h>
  51#include <net/rawv6.h>
  52#include <net/icmp.h>
  53#include <net/xfrm.h>
  54#include <net/checksum.h>
  55#include <linux/mroute6.h>
  56#include <net/l3mdev.h>
  57#include <net/lwtunnel.h>
  58#include <net/ip_tunnels.h>
  59
  60static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb)
  61{
  62	struct dst_entry *dst = skb_dst(skb);
  63	struct net_device *dev = dst->dev;
  64	struct inet6_dev *idev = ip6_dst_idev(dst);
  65	unsigned int hh_len = LL_RESERVED_SPACE(dev);
  66	const struct in6_addr *daddr, *nexthop;
  67	struct ipv6hdr *hdr;
  68	struct neighbour *neigh;
 
  69	int ret;
  70
  71	/* Be paranoid, rather than too clever. */
  72	if (unlikely(hh_len > skb_headroom(skb)) && dev->header_ops) {
  73		/* Make sure idev stays alive */
  74		rcu_read_lock();
  75		skb = skb_expand_head(skb, hh_len);
  76		if (!skb) {
  77			IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
  78			rcu_read_unlock();
  79			return -ENOMEM;
  80		}
  81		rcu_read_unlock();
  82	}
  83
  84	hdr = ipv6_hdr(skb);
  85	daddr = &hdr->daddr;
  86	if (ipv6_addr_is_multicast(daddr)) {
  87		if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) &&
  88		    ((mroute6_is_socket(net, skb) &&
  89		     !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) ||
  90		     ipv6_chk_mcast_addr(dev, daddr, &hdr->saddr))) {
 
  91			struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
  92
  93			/* Do not check for IFF_ALLMULTI; multicast routing
  94			   is not supported in any case.
  95			 */
  96			if (newskb)
  97				NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING,
  98					net, sk, newskb, NULL, newskb->dev,
  99					dev_loopback_xmit);
 100
 101			if (hdr->hop_limit == 0) {
 102				IP6_INC_STATS(net, idev,
 103					      IPSTATS_MIB_OUTDISCARDS);
 104				kfree_skb(skb);
 105				return 0;
 106			}
 107		}
 108
 109		IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, skb->len);
 110		if (IPV6_ADDR_MC_SCOPE(daddr) <= IPV6_ADDR_SCOPE_NODELOCAL &&
 
 
 111		    !(dev->flags & IFF_LOOPBACK)) {
 112			kfree_skb(skb);
 113			return 0;
 114		}
 115	}
 116
 117	if (lwtunnel_xmit_redirect(dst->lwtstate)) {
 118		int res = lwtunnel_xmit(skb);
 119
 120		if (res != LWTUNNEL_XMIT_CONTINUE)
 121			return res;
 122	}
 123
 124	IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
 
 
 
 
 
 
 
 
 
 
 
 125
 126	rcu_read_lock();
 127	nexthop = rt6_nexthop(dst_rt6_info(dst), daddr);
 128	neigh = __ipv6_neigh_lookup_noref(dev, nexthop);
 129
 130	if (IS_ERR_OR_NULL(neigh)) {
 131		if (unlikely(!neigh))
 132			neigh = __neigh_create(&nd_tbl, nexthop, dev, false);
 133		if (IS_ERR(neigh)) {
 134			rcu_read_unlock();
 135			IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTNOROUTES);
 136			kfree_skb_reason(skb, SKB_DROP_REASON_NEIGH_CREATEFAIL);
 137			return -EINVAL;
 138		}
 139	}
 140	sock_confirm_neigh(skb, neigh);
 141	ret = neigh_output(neigh, skb, false);
 142	rcu_read_unlock();
 143	return ret;
 144}
 145
 146static int
 147ip6_finish_output_gso_slowpath_drop(struct net *net, struct sock *sk,
 148				    struct sk_buff *skb, unsigned int mtu)
 149{
 150	struct sk_buff *segs, *nskb;
 151	netdev_features_t features;
 152	int ret = 0;
 153
 154	/* Please see corresponding comment in ip_finish_output_gso
 155	 * describing the cases where GSO segment length exceeds the
 156	 * egress MTU.
 157	 */
 158	features = netif_skb_features(skb);
 159	segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
 160	if (IS_ERR_OR_NULL(segs)) {
 161		kfree_skb(skb);
 162		return -ENOMEM;
 163	}
 164
 165	consume_skb(skb);
 166
 167	skb_list_walk_safe(segs, segs, nskb) {
 168		int err;
 169
 170		skb_mark_not_on_list(segs);
 171		/* Last GSO segment can be smaller than gso_size (and MTU).
 172		 * Adding a fragment header would produce an "atomic fragment",
 173		 * which is considered harmful (RFC-8021). Avoid that.
 174		 */
 175		err = segs->len > mtu ?
 176			ip6_fragment(net, sk, segs, ip6_finish_output2) :
 177			ip6_finish_output2(net, sk, segs);
 178		if (err && ret == 0)
 179			ret = err;
 180	}
 181
 182	return ret;
 183}
 184
 185static int ip6_finish_output_gso(struct net *net, struct sock *sk,
 186				 struct sk_buff *skb, unsigned int mtu)
 187{
 188	if (!(IP6CB(skb)->flags & IP6SKB_FAKEJUMBO) &&
 189	    !skb_gso_validate_network_len(skb, mtu))
 190		return ip6_finish_output_gso_slowpath_drop(net, sk, skb, mtu);
 191
 192	return ip6_finish_output2(net, sk, skb);
 193}
 194
 195static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
 196{
 197	unsigned int mtu;
 198
 199#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
 200	/* Policy lookup after SNAT yielded a new policy */
 201	if (skb_dst(skb)->xfrm) {
 202		IP6CB(skb)->flags |= IP6SKB_REROUTED;
 203		return dst_output(net, sk, skb);
 204	}
 205#endif
 206
 207	mtu = ip6_skb_dst_mtu(skb);
 208	if (skb_is_gso(skb))
 209		return ip6_finish_output_gso(net, sk, skb, mtu);
 210
 211	if (skb->len > mtu ||
 212	    (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
 213		return ip6_fragment(net, sk, skb, ip6_finish_output2);
 214
 215	return ip6_finish_output2(net, sk, skb);
 216}
 217
 218static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
 219{
 220	int ret;
 221
 222	ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb);
 223	switch (ret) {
 224	case NET_XMIT_SUCCESS:
 225	case NET_XMIT_CN:
 226		return __ip6_finish_output(net, sk, skb) ? : ret;
 227	default:
 228		kfree_skb_reason(skb, SKB_DROP_REASON_BPF_CGROUP_EGRESS);
 229		return ret;
 230	}
 231}
 232
 233int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
 234{
 235	struct net_device *dev = skb_dst(skb)->dev, *indev = skb->dev;
 236	struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
 237
 238	skb->protocol = htons(ETH_P_IPV6);
 239	skb->dev = dev;
 240
 241	if (unlikely(!idev || READ_ONCE(idev->cnf.disable_ipv6))) {
 242		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
 243		kfree_skb_reason(skb, SKB_DROP_REASON_IPV6DISABLED);
 244		return 0;
 245	}
 246
 247	return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING,
 248			    net, sk, skb, indev, dev,
 249			    ip6_finish_output,
 250			    !(IP6CB(skb)->flags & IP6SKB_REROUTED));
 251}
 252EXPORT_SYMBOL(ip6_output);
 253
 254bool ip6_autoflowlabel(struct net *net, const struct sock *sk)
 255{
 256	if (!inet6_test_bit(AUTOFLOWLABEL_SET, sk))
 257		return ip6_default_np_autolabel(net);
 258	return inet6_test_bit(AUTOFLOWLABEL, sk);
 
 259}
 260
 261/*
 262 * xmit an sk_buff (used by TCP, SCTP and DCCP)
 263 * Note : socket lock is not held for SYNACK packets, but might be modified
 264 * by calls to skb_set_owner_w() and ipv6_local_error(),
 265 * which are using proper atomic operations or spinlocks.
 266 */
 267int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
 268	     __u32 mark, struct ipv6_txoptions *opt, int tclass, u32 priority)
 269{
 270	struct net *net = sock_net(sk);
 271	const struct ipv6_pinfo *np = inet6_sk(sk);
 272	struct in6_addr *first_hop = &fl6->daddr;
 273	struct dst_entry *dst = skb_dst(skb);
 274	struct net_device *dev = dst->dev;
 275	struct inet6_dev *idev = ip6_dst_idev(dst);
 276	struct hop_jumbo_hdr *hop_jumbo;
 277	int hoplen = sizeof(*hop_jumbo);
 278	unsigned int head_room;
 279	struct ipv6hdr *hdr;
 280	u8  proto = fl6->flowi6_proto;
 281	int seg_len = skb->len;
 282	int hlimit = -1;
 283	u32 mtu;
 284
 285	head_room = sizeof(struct ipv6hdr) + hoplen + LL_RESERVED_SPACE(dev);
 286	if (opt)
 287		head_room += opt->opt_nflen + opt->opt_flen;
 288
 289	if (unlikely(head_room > skb_headroom(skb))) {
 290		/* Make sure idev stays alive */
 291		rcu_read_lock();
 292		skb = skb_expand_head(skb, head_room);
 293		if (!skb) {
 294			IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
 295			rcu_read_unlock();
 296			return -ENOBUFS;
 297		}
 298		rcu_read_unlock();
 299	}
 300
 301	if (opt) {
 302		seg_len += opt->opt_nflen + opt->opt_flen;
 303
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 304		if (opt->opt_flen)
 305			ipv6_push_frag_opts(skb, opt, &proto);
 306
 307		if (opt->opt_nflen)
 308			ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop,
 309					     &fl6->saddr);
 310	}
 311
 312	if (unlikely(seg_len > IPV6_MAXPLEN)) {
 313		hop_jumbo = skb_push(skb, hoplen);
 314
 315		hop_jumbo->nexthdr = proto;
 316		hop_jumbo->hdrlen = 0;
 317		hop_jumbo->tlv_type = IPV6_TLV_JUMBO;
 318		hop_jumbo->tlv_len = 4;
 319		hop_jumbo->jumbo_payload_len = htonl(seg_len + hoplen);
 320
 321		proto = IPPROTO_HOPOPTS;
 322		seg_len = 0;
 323		IP6CB(skb)->flags |= IP6SKB_FAKEJUMBO;
 324	}
 325
 326	skb_push(skb, sizeof(struct ipv6hdr));
 327	skb_reset_network_header(skb);
 328	hdr = ipv6_hdr(skb);
 329
 330	/*
 331	 *	Fill in the IPv6 header
 332	 */
 333	if (np)
 334		hlimit = READ_ONCE(np->hop_limit);
 335	if (hlimit < 0)
 336		hlimit = ip6_dst_hoplimit(dst);
 337
 338	ip6_flow_hdr(hdr, tclass, ip6_make_flowlabel(net, skb, fl6->flowlabel,
 339				ip6_autoflowlabel(net, sk), fl6));
 340
 341	hdr->payload_len = htons(seg_len);
 342	hdr->nexthdr = proto;
 343	hdr->hop_limit = hlimit;
 344
 345	hdr->saddr = fl6->saddr;
 346	hdr->daddr = *first_hop;
 347
 348	skb->protocol = htons(ETH_P_IPV6);
 349	skb->priority = priority;
 350	skb->mark = mark;
 351
 352	mtu = dst_mtu(dst);
 353	if ((skb->len <= mtu) || skb->ignore_df || skb_is_gso(skb)) {
 354		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTREQUESTS);
 
 355
 356		/* if egress device is enslaved to an L3 master device pass the
 357		 * skb to its handler for processing
 358		 */
 359		skb = l3mdev_ip6_out((struct sock *)sk, skb);
 360		if (unlikely(!skb))
 361			return 0;
 362
 363		/* hooks should never assume socket lock is held.
 364		 * we promote our socket to non const
 365		 */
 366		return NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT,
 367			       net, (struct sock *)sk, skb, NULL, dev,
 368			       dst_output);
 369	}
 370
 371	skb->dev = dev;
 372	/* ipv6_local_error() does not require socket lock,
 373	 * we promote our socket to non const
 374	 */
 375	ipv6_local_error((struct sock *)sk, EMSGSIZE, fl6, mtu);
 376
 377	IP6_INC_STATS(net, idev, IPSTATS_MIB_FRAGFAILS);
 378	kfree_skb(skb);
 379	return -EMSGSIZE;
 380}
 381EXPORT_SYMBOL(ip6_xmit);
 382
 383static int ip6_call_ra_chain(struct sk_buff *skb, int sel)
 384{
 385	struct ip6_ra_chain *ra;
 386	struct sock *last = NULL;
 387
 388	read_lock(&ip6_ra_lock);
 389	for (ra = ip6_ra_chain; ra; ra = ra->next) {
 390		struct sock *sk = ra->sk;
 391		if (sk && ra->sel == sel &&
 392		    (!sk->sk_bound_dev_if ||
 393		     sk->sk_bound_dev_if == skb->dev->ifindex)) {
 394
 395			if (inet6_test_bit(RTALERT_ISOLATE, sk) &&
 396			    !net_eq(sock_net(sk), dev_net(skb->dev))) {
 397				continue;
 398			}
 399			if (last) {
 400				struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
 401				if (skb2)
 402					rawv6_rcv(last, skb2);
 403			}
 404			last = sk;
 405		}
 406	}
 407
 408	if (last) {
 409		rawv6_rcv(last, skb);
 410		read_unlock(&ip6_ra_lock);
 411		return 1;
 412	}
 413	read_unlock(&ip6_ra_lock);
 414	return 0;
 415}
 416
 417static int ip6_forward_proxy_check(struct sk_buff *skb)
 418{
 419	struct ipv6hdr *hdr = ipv6_hdr(skb);
 420	u8 nexthdr = hdr->nexthdr;
 421	__be16 frag_off;
 422	int offset;
 423
 424	if (ipv6_ext_hdr(nexthdr)) {
 425		offset = ipv6_skip_exthdr(skb, sizeof(*hdr), &nexthdr, &frag_off);
 426		if (offset < 0)
 427			return 0;
 428	} else
 429		offset = sizeof(struct ipv6hdr);
 430
 431	if (nexthdr == IPPROTO_ICMPV6) {
 432		struct icmp6hdr *icmp6;
 433
 434		if (!pskb_may_pull(skb, (skb_network_header(skb) +
 435					 offset + 1 - skb->data)))
 436			return 0;
 437
 438		icmp6 = (struct icmp6hdr *)(skb_network_header(skb) + offset);
 439
 440		switch (icmp6->icmp6_type) {
 441		case NDISC_ROUTER_SOLICITATION:
 442		case NDISC_ROUTER_ADVERTISEMENT:
 443		case NDISC_NEIGHBOUR_SOLICITATION:
 444		case NDISC_NEIGHBOUR_ADVERTISEMENT:
 445		case NDISC_REDIRECT:
 446			/* For reaction involving unicast neighbor discovery
 447			 * message destined to the proxied address, pass it to
 448			 * input function.
 449			 */
 450			return 1;
 451		default:
 452			break;
 453		}
 454	}
 455
 456	/*
 457	 * The proxying router can't forward traffic sent to a link-local
 458	 * address, so signal the sender and discard the packet. This
 459	 * behavior is clarified by the MIPv6 specification.
 460	 */
 461	if (ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) {
 462		dst_link_failure(skb);
 463		return -1;
 464	}
 465
 466	return 0;
 467}
 468
 469static inline int ip6_forward_finish(struct net *net, struct sock *sk,
 470				     struct sk_buff *skb)
 471{
 472#ifdef CONFIG_NET_SWITCHDEV
 473	if (skb->offload_l3_fwd_mark) {
 474		consume_skb(skb);
 475		return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 476	}
 477#endif
 478
 479	skb_clear_tstamp(skb);
 480	return dst_output(net, sk, skb);
 
 
 
 
 
 
 481}
 
 482
 483static bool ip6_pkt_too_big(const struct sk_buff *skb, unsigned int mtu)
 484{
 485	if (skb->len <= mtu)
 486		return false;
 487
 488	/* ipv6 conntrack defrag sets max_frag_size + ignore_df */
 489	if (IP6CB(skb)->frag_max_size && IP6CB(skb)->frag_max_size > mtu)
 490		return true;
 491
 492	if (skb->ignore_df)
 493		return false;
 494
 495	if (skb_is_gso(skb) && skb_gso_validate_network_len(skb, mtu))
 496		return false;
 497
 498	return true;
 499}
 500
 501int ip6_forward(struct sk_buff *skb)
 502{
 503	struct dst_entry *dst = skb_dst(skb);
 504	struct ipv6hdr *hdr = ipv6_hdr(skb);
 505	struct inet6_skb_parm *opt = IP6CB(skb);
 506	struct net *net = dev_net(dst->dev);
 507	struct inet6_dev *idev;
 508	SKB_DR(reason);
 509	u32 mtu;
 510
 511	idev = __in6_dev_get_safely(dev_get_by_index_rcu(net, IP6CB(skb)->iif));
 512	if (READ_ONCE(net->ipv6.devconf_all->forwarding) == 0)
 513		goto error;
 514
 515	if (skb->pkt_type != PACKET_HOST)
 516		goto drop;
 517
 518	if (unlikely(skb->sk))
 519		goto drop;
 520
 521	if (skb_warn_if_lro(skb))
 522		goto drop;
 523
 524	if (!READ_ONCE(net->ipv6.devconf_all->disable_policy) &&
 525	    (!idev || !READ_ONCE(idev->cnf.disable_policy)) &&
 526	    !xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) {
 527		__IP6_INC_STATS(net, idev, IPSTATS_MIB_INDISCARDS);
 528		goto drop;
 529	}
 530
 531	skb_forward_csum(skb);
 532
 533	/*
 534	 *	We DO NOT make any processing on
 535	 *	RA packets, pushing them to user level AS IS
 536	 *	without ane WARRANTY that application will be able
 537	 *	to interpret them. The reason is that we
 538	 *	cannot make anything clever here.
 539	 *
 540	 *	We are not end-node, so that if packet contains
 541	 *	AH/ESP, we cannot make anything.
 542	 *	Defragmentation also would be mistake, RA packets
 543	 *	cannot be fragmented, because there is no warranty
 544	 *	that different fragments will go along one path. --ANK
 545	 */
 546	if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) {
 547		if (ip6_call_ra_chain(skb, ntohs(opt->ra)))
 548			return 0;
 549	}
 550
 551	/*
 552	 *	check and decrement ttl
 553	 */
 554	if (hdr->hop_limit <= 1) {
 
 
 555		icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0);
 556		__IP6_INC_STATS(net, idev, IPSTATS_MIB_INHDRERRORS);
 
 557
 558		kfree_skb_reason(skb, SKB_DROP_REASON_IP_INHDR);
 559		return -ETIMEDOUT;
 560	}
 561
 562	/* XXX: idev->cnf.proxy_ndp? */
 563	if (READ_ONCE(net->ipv6.devconf_all->proxy_ndp) &&
 564	    pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
 565		int proxied = ip6_forward_proxy_check(skb);
 566		if (proxied > 0) {
 567			/* It's tempting to decrease the hop limit
 568			 * here by 1, as we do at the end of the
 569			 * function too.
 570			 *
 571			 * But that would be incorrect, as proxying is
 572			 * not forwarding.  The ip6_input function
 573			 * will handle this packet locally, and it
 574			 * depends on the hop limit being unchanged.
 575			 *
 576			 * One example is the NDP hop limit, that
 577			 * always has to stay 255, but other would be
 578			 * similar checks around RA packets, where the
 579			 * user can even change the desired limit.
 580			 */
 581			return ip6_input(skb);
 582		} else if (proxied < 0) {
 583			__IP6_INC_STATS(net, idev, IPSTATS_MIB_INDISCARDS);
 
 584			goto drop;
 585		}
 586	}
 587
 588	if (!xfrm6_route_forward(skb)) {
 589		__IP6_INC_STATS(net, idev, IPSTATS_MIB_INDISCARDS);
 590		SKB_DR_SET(reason, XFRM_POLICY);
 591		goto drop;
 592	}
 593	dst = skb_dst(skb);
 594
 595	/* IPv6 specs say nothing about it, but it is clear that we cannot
 596	   send redirects to source routed frames.
 597	   We don't send redirects to frames decapsulated from IPsec.
 598	 */
 599	if (IP6CB(skb)->iif == dst->dev->ifindex &&
 600	    opt->srcrt == 0 && !skb_sec_path(skb)) {
 601		struct in6_addr *target = NULL;
 602		struct inet_peer *peer;
 603		struct rt6_info *rt;
 604
 605		/*
 606		 *	incoming and outgoing devices are the same
 607		 *	send a redirect.
 608		 */
 609
 610		rt = dst_rt6_info(dst);
 611		if (rt->rt6i_flags & RTF_GATEWAY)
 612			target = &rt->rt6i_gateway;
 613		else
 614			target = &hdr->daddr;
 615
 616		rcu_read_lock();
 617		peer = inet_getpeer_v6(net->ipv6.peers, &hdr->daddr);
 618
 619		/* Limit redirects both by destination (here)
 620		   and by source (inside ndisc_send_redirect)
 621		 */
 622		if (inet_peer_xrlim_allow(peer, 1*HZ))
 623			ndisc_send_redirect(skb, target);
 624		rcu_read_unlock();
 
 625	} else {
 626		int addrtype = ipv6_addr_type(&hdr->saddr);
 627
 628		/* This check is security critical. */
 629		if (addrtype == IPV6_ADDR_ANY ||
 630		    addrtype & (IPV6_ADDR_MULTICAST | IPV6_ADDR_LOOPBACK))
 631			goto error;
 632		if (addrtype & IPV6_ADDR_LINKLOCAL) {
 633			icmpv6_send(skb, ICMPV6_DEST_UNREACH,
 634				    ICMPV6_NOT_NEIGHBOUR, 0);
 635			goto error;
 636		}
 637	}
 638
 639	__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
 640
 641	mtu = ip6_dst_mtu_maybe_forward(dst, true);
 642	if (mtu < IPV6_MIN_MTU)
 643		mtu = IPV6_MIN_MTU;
 644
 645	if (ip6_pkt_too_big(skb, mtu)) {
 646		/* Again, force OUTPUT device used as source address */
 647		skb->dev = dst->dev;
 648		icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
 649		__IP6_INC_STATS(net, idev, IPSTATS_MIB_INTOOBIGERRORS);
 
 650		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 651				IPSTATS_MIB_FRAGFAILS);
 652		kfree_skb_reason(skb, SKB_DROP_REASON_PKT_TOO_BIG);
 653		return -EMSGSIZE;
 654	}
 655
 656	if (skb_cow(skb, dst->dev->hard_header_len)) {
 657		__IP6_INC_STATS(net, ip6_dst_idev(dst),
 658				IPSTATS_MIB_OUTDISCARDS);
 659		goto drop;
 660	}
 661
 662	hdr = ipv6_hdr(skb);
 663
 664	/* Mangling hops number delayed to point after skb COW */
 665
 666	hdr->hop_limit--;
 667
 668	return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
 669		       net, NULL, skb, skb->dev, dst->dev,
 670		       ip6_forward_finish);
 671
 672error:
 673	__IP6_INC_STATS(net, idev, IPSTATS_MIB_INADDRERRORS);
 674	SKB_DR_SET(reason, IP_INADDRERRORS);
 675drop:
 676	kfree_skb_reason(skb, reason);
 677	return -EINVAL;
 678}
 679
 680static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
 681{
 682	to->pkt_type = from->pkt_type;
 683	to->priority = from->priority;
 684	to->protocol = from->protocol;
 685	skb_dst_drop(to);
 686	skb_dst_set(to, dst_clone(skb_dst(from)));
 687	to->dev = from->dev;
 688	to->mark = from->mark;
 689
 690	skb_copy_hash(to, from);
 691
 692#ifdef CONFIG_NET_SCHED
 693	to->tc_index = from->tc_index;
 694#endif
 695	nf_copy(to, from);
 696	skb_ext_copy(to, from);
 697	skb_copy_secmark(to, from);
 698}
 699
 700int ip6_fraglist_init(struct sk_buff *skb, unsigned int hlen, u8 *prevhdr,
 701		      u8 nexthdr, __be32 frag_id,
 702		      struct ip6_fraglist_iter *iter)
 703{
 704	unsigned int first_len;
 705	struct frag_hdr *fh;
 706
 707	/* BUILD HEADER */
 708	*prevhdr = NEXTHDR_FRAGMENT;
 709	iter->tmp_hdr = kmemdup(skb_network_header(skb), hlen, GFP_ATOMIC);
 710	if (!iter->tmp_hdr)
 711		return -ENOMEM;
 712
 713	iter->frag = skb_shinfo(skb)->frag_list;
 714	skb_frag_list_init(skb);
 715
 716	iter->offset = 0;
 717	iter->hlen = hlen;
 718	iter->frag_id = frag_id;
 719	iter->nexthdr = nexthdr;
 720
 721	__skb_pull(skb, hlen);
 722	fh = __skb_push(skb, sizeof(struct frag_hdr));
 723	__skb_push(skb, hlen);
 724	skb_reset_network_header(skb);
 725	memcpy(skb_network_header(skb), iter->tmp_hdr, hlen);
 726
 727	fh->nexthdr = nexthdr;
 728	fh->reserved = 0;
 729	fh->frag_off = htons(IP6_MF);
 730	fh->identification = frag_id;
 731
 732	first_len = skb_pagelen(skb);
 733	skb->data_len = first_len - skb_headlen(skb);
 734	skb->len = first_len;
 735	ipv6_hdr(skb)->payload_len = htons(first_len - sizeof(struct ipv6hdr));
 736
 737	return 0;
 738}
 739EXPORT_SYMBOL(ip6_fraglist_init);
 740
 741void ip6_fraglist_prepare(struct sk_buff *skb,
 742			  struct ip6_fraglist_iter *iter)
 743{
 744	struct sk_buff *frag = iter->frag;
 745	unsigned int hlen = iter->hlen;
 746	struct frag_hdr *fh;
 747
 748	frag->ip_summed = CHECKSUM_NONE;
 749	skb_reset_transport_header(frag);
 750	fh = __skb_push(frag, sizeof(struct frag_hdr));
 751	__skb_push(frag, hlen);
 752	skb_reset_network_header(frag);
 753	memcpy(skb_network_header(frag), iter->tmp_hdr, hlen);
 754	iter->offset += skb->len - hlen - sizeof(struct frag_hdr);
 755	fh->nexthdr = iter->nexthdr;
 756	fh->reserved = 0;
 757	fh->frag_off = htons(iter->offset);
 758	if (frag->next)
 759		fh->frag_off |= htons(IP6_MF);
 760	fh->identification = iter->frag_id;
 761	ipv6_hdr(frag)->payload_len = htons(frag->len - sizeof(struct ipv6hdr));
 762	ip6_copy_metadata(frag, skb);
 763}
 764EXPORT_SYMBOL(ip6_fraglist_prepare);
 765
 766void ip6_frag_init(struct sk_buff *skb, unsigned int hlen, unsigned int mtu,
 767		   unsigned short needed_tailroom, int hdr_room, u8 *prevhdr,
 768		   u8 nexthdr, __be32 frag_id, struct ip6_frag_state *state)
 769{
 770	state->prevhdr = prevhdr;
 771	state->nexthdr = nexthdr;
 772	state->frag_id = frag_id;
 773
 774	state->hlen = hlen;
 775	state->mtu = mtu;
 776
 777	state->left = skb->len - hlen;	/* Space per frame */
 778	state->ptr = hlen;		/* Where to start from */
 779
 780	state->hroom = hdr_room;
 781	state->troom = needed_tailroom;
 782
 783	state->offset = 0;
 784}
 785EXPORT_SYMBOL(ip6_frag_init);
 786
 787struct sk_buff *ip6_frag_next(struct sk_buff *skb, struct ip6_frag_state *state)
 788{
 789	u8 *prevhdr = state->prevhdr, *fragnexthdr_offset;
 790	struct sk_buff *frag;
 791	struct frag_hdr *fh;
 792	unsigned int len;
 793
 794	len = state->left;
 795	/* IF: it doesn't fit, use 'mtu' - the data space left */
 796	if (len > state->mtu)
 797		len = state->mtu;
 798	/* IF: we are not sending up to and including the packet end
 799	   then align the next start on an eight byte boundary */
 800	if (len < state->left)
 801		len &= ~7;
 802
 803	/* Allocate buffer */
 804	frag = alloc_skb(len + state->hlen + sizeof(struct frag_hdr) +
 805			 state->hroom + state->troom, GFP_ATOMIC);
 806	if (!frag)
 807		return ERR_PTR(-ENOMEM);
 808
 809	/*
 810	 *	Set up data on packet
 811	 */
 812
 813	ip6_copy_metadata(frag, skb);
 814	skb_reserve(frag, state->hroom);
 815	skb_put(frag, len + state->hlen + sizeof(struct frag_hdr));
 816	skb_reset_network_header(frag);
 817	fh = (struct frag_hdr *)(skb_network_header(frag) + state->hlen);
 818	frag->transport_header = (frag->network_header + state->hlen +
 819				  sizeof(struct frag_hdr));
 820
 821	/*
 822	 *	Charge the memory for the fragment to any owner
 823	 *	it might possess
 824	 */
 825	if (skb->sk)
 826		skb_set_owner_w(frag, skb->sk);
 827
 828	/*
 829	 *	Copy the packet header into the new buffer.
 830	 */
 831	skb_copy_from_linear_data(skb, skb_network_header(frag), state->hlen);
 832
 833	fragnexthdr_offset = skb_network_header(frag);
 834	fragnexthdr_offset += prevhdr - skb_network_header(skb);
 835	*fragnexthdr_offset = NEXTHDR_FRAGMENT;
 836
 837	/*
 838	 *	Build fragment header.
 839	 */
 840	fh->nexthdr = state->nexthdr;
 841	fh->reserved = 0;
 842	fh->identification = state->frag_id;
 843
 844	/*
 845	 *	Copy a block of the IP datagram.
 846	 */
 847	BUG_ON(skb_copy_bits(skb, state->ptr, skb_transport_header(frag),
 848			     len));
 849	state->left -= len;
 850
 851	fh->frag_off = htons(state->offset);
 852	if (state->left > 0)
 853		fh->frag_off |= htons(IP6_MF);
 854	ipv6_hdr(frag)->payload_len = htons(frag->len - sizeof(struct ipv6hdr));
 855
 856	state->ptr += len;
 857	state->offset += len;
 858
 859	return frag;
 860}
 861EXPORT_SYMBOL(ip6_frag_next);
 862
 863int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
 864		 int (*output)(struct net *, struct sock *, struct sk_buff *))
 865{
 866	struct sk_buff *frag;
 867	struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
 868	struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ?
 869				inet6_sk(skb->sk) : NULL;
 870	u8 tstamp_type = skb->tstamp_type;
 871	struct ip6_frag_state state;
 872	unsigned int mtu, hlen, nexthdr_offset;
 873	ktime_t tstamp = skb->tstamp;
 874	int hroom, err = 0;
 875	__be32 frag_id;
 
 876	u8 *prevhdr, nexthdr = 0;
 877
 878	err = ip6_find_1stfragopt(skb, &prevhdr);
 879	if (err < 0)
 880		goto fail;
 881	hlen = err;
 882	nexthdr = *prevhdr;
 883	nexthdr_offset = prevhdr - skb_network_header(skb);
 884
 885	mtu = ip6_skb_dst_mtu(skb);
 886
 887	/* We must not fragment if the socket is set to force MTU discovery
 888	 * or if the skb it not generated by a local socket.
 889	 */
 890	if (unlikely(!skb->ignore_df && skb->len > mtu))
 891		goto fail_toobig;
 892
 893	if (IP6CB(skb)->frag_max_size) {
 894		if (IP6CB(skb)->frag_max_size > mtu)
 895			goto fail_toobig;
 896
 897		/* don't send fragments larger than what we received */
 898		mtu = IP6CB(skb)->frag_max_size;
 899		if (mtu < IPV6_MIN_MTU)
 900			mtu = IPV6_MIN_MTU;
 901	}
 902
 903	if (np) {
 904		u32 frag_size = READ_ONCE(np->frag_size);
 905
 906		if (frag_size && frag_size < mtu)
 907			mtu = frag_size;
 908	}
 909	if (mtu < hlen + sizeof(struct frag_hdr) + 8)
 910		goto fail_toobig;
 911	mtu -= hlen + sizeof(struct frag_hdr);
 912
 913	frag_id = ipv6_select_ident(net, &ipv6_hdr(skb)->daddr,
 914				    &ipv6_hdr(skb)->saddr);
 915
 916	if (skb->ip_summed == CHECKSUM_PARTIAL &&
 917	    (err = skb_checksum_help(skb)))
 918		goto fail;
 919
 920	prevhdr = skb_network_header(skb) + nexthdr_offset;
 921	hroom = LL_RESERVED_SPACE(rt->dst.dev);
 922	if (skb_has_frag_list(skb)) {
 923		unsigned int first_len = skb_pagelen(skb);
 924		struct ip6_fraglist_iter iter;
 925		struct sk_buff *frag2;
 926
 927		if (first_len - hlen > mtu ||
 928		    ((first_len - hlen) & 7) ||
 929		    skb_cloned(skb) ||
 930		    skb_headroom(skb) < (hroom + sizeof(struct frag_hdr)))
 931			goto slow_path;
 932
 933		skb_walk_frags(skb, frag) {
 934			/* Correct geometry. */
 935			if (frag->len > mtu ||
 936			    ((frag->len & 7) && frag->next) ||
 937			    skb_headroom(frag) < (hlen + hroom + sizeof(struct frag_hdr)))
 938				goto slow_path_clean;
 939
 940			/* Partially cloned skb? */
 941			if (skb_shared(frag))
 942				goto slow_path_clean;
 943
 944			BUG_ON(frag->sk);
 945			if (skb->sk) {
 946				frag->sk = skb->sk;
 947				frag->destructor = sock_wfree;
 948			}
 949			skb->truesize -= frag->truesize;
 950		}
 951
 952		err = ip6_fraglist_init(skb, hlen, prevhdr, nexthdr, frag_id,
 953					&iter);
 954		if (err < 0)
 
 
 
 
 
 955			goto fail;
 
 
 
 956
 957		/* We prevent @rt from being freed. */
 958		rcu_read_lock();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 959
 960		for (;;) {
 961			/* Prepare header of the next frame,
 962			 * before previous one went down. */
 963			if (iter.frag)
 964				ip6_fraglist_prepare(skb, &iter);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 965
 966			skb_set_delivery_time(skb, tstamp, tstamp_type);
 967			err = output(net, sk, skb);
 968			if (!err)
 969				IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 970					      IPSTATS_MIB_FRAGCREATES);
 971
 972			if (err || !iter.frag)
 973				break;
 974
 975			skb = ip6_fraglist_next(&iter);
 
 
 976		}
 977
 978		kfree(iter.tmp_hdr);
 979
 980		if (err == 0) {
 981			IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 982				      IPSTATS_MIB_FRAGOKS);
 983			rcu_read_unlock();
 984			return 0;
 985		}
 986
 987		kfree_skb_list(iter.frag);
 988
 989		IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
 990			      IPSTATS_MIB_FRAGFAILS);
 991		rcu_read_unlock();
 992		return err;
 993
 994slow_path_clean:
 995		skb_walk_frags(skb, frag2) {
 996			if (frag2 == frag)
 997				break;
 998			frag2->sk = NULL;
 999			frag2->destructor = NULL;
1000			skb->truesize += frag2->truesize;
1001		}
1002	}
1003
1004slow_path:
 
 
 
1005	/*
1006	 *	Fragment the datagram.
1007	 */
1008
1009	ip6_frag_init(skb, hlen, mtu, rt->dst.dev->needed_tailroom,
1010		      LL_RESERVED_SPACE(rt->dst.dev), prevhdr, nexthdr, frag_id,
1011		      &state);
1012
1013	/*
1014	 *	Keep copying data until we run out.
1015	 */
 
 
1016
1017	while (state.left > 0) {
1018		frag = ip6_frag_next(skb, &state);
1019		if (IS_ERR(frag)) {
1020			err = PTR_ERR(frag);
 
 
 
 
 
 
 
 
 
 
 
1021			goto fail;
1022		}
1023
1024		/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1025		 *	Put this fragment into the sending queue.
1026		 */
1027		skb_set_delivery_time(frag, tstamp, tstamp_type);
1028		err = output(net, sk, frag);
1029		if (err)
1030			goto fail;
1031
1032		IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
1033			      IPSTATS_MIB_FRAGCREATES);
1034	}
1035	IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
1036		      IPSTATS_MIB_FRAGOKS);
1037	consume_skb(skb);
1038	return err;
1039
1040fail_toobig:
 
 
 
1041	icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
1042	err = -EMSGSIZE;
1043
1044fail:
1045	IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
1046		      IPSTATS_MIB_FRAGFAILS);
1047	kfree_skb(skb);
1048	return err;
1049}
1050
1051static inline int ip6_rt_check(const struct rt6key *rt_key,
1052			       const struct in6_addr *fl_addr,
1053			       const struct in6_addr *addr_cache)
1054{
1055	return (rt_key->plen != 128 || !ipv6_addr_equal(fl_addr, &rt_key->addr)) &&
1056		(!addr_cache || !ipv6_addr_equal(fl_addr, addr_cache));
1057}
1058
1059static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
1060					  struct dst_entry *dst,
1061					  const struct flowi6 *fl6)
1062{
1063	struct ipv6_pinfo *np = inet6_sk(sk);
1064	struct rt6_info *rt;
1065
1066	if (!dst)
1067		goto out;
1068
1069	if (dst->ops->family != AF_INET6) {
1070		dst_release(dst);
1071		return NULL;
1072	}
1073
1074	rt = dst_rt6_info(dst);
1075	/* Yes, checking route validity in not connected
1076	 * case is not very simple. Take into account,
1077	 * that we do not support routing by source, TOS,
1078	 * and MSG_DONTROUTE		--ANK (980726)
1079	 *
1080	 * 1. ip6_rt_check(): If route was host route,
1081	 *    check that cached destination is current.
1082	 *    If it is network route, we still may
1083	 *    check its validity using saved pointer
1084	 *    to the last used address: daddr_cache.
1085	 *    We do not want to save whole address now,
1086	 *    (because main consumer of this service
1087	 *    is tcp, which has not this problem),
1088	 *    so that the last trick works only on connected
1089	 *    sockets.
1090	 * 2. oif also should be the same.
1091	 */
1092	if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr, np->daddr_cache) ||
1093#ifdef CONFIG_IPV6_SUBTREES
1094	    ip6_rt_check(&rt->rt6i_src, &fl6->saddr, np->saddr_cache) ||
1095#endif
1096	   (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex)) {
 
1097		dst_release(dst);
1098		dst = NULL;
1099	}
1100
1101out:
1102	return dst;
1103}
1104
1105static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
1106			       struct dst_entry **dst, struct flowi6 *fl6)
1107{
1108#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1109	struct neighbour *n;
1110	struct rt6_info *rt;
1111#endif
1112	int err;
1113	int flags = 0;
1114
1115	/* The correct way to handle this would be to do
1116	 * ip6_route_get_saddr, and then ip6_route_output; however,
1117	 * the route-specific preferred source forces the
1118	 * ip6_route_output call _before_ ip6_route_get_saddr.
1119	 *
1120	 * In source specific routing (no src=any default route),
1121	 * ip6_route_output will fail given src=any saddr, though, so
1122	 * that's why we try it again later.
1123	 */
1124	if (ipv6_addr_any(&fl6->saddr)) {
1125		struct fib6_info *from;
1126		struct rt6_info *rt;
 
1127
1128		*dst = ip6_route_output(net, sk, fl6);
1129		rt = (*dst)->error ? NULL : dst_rt6_info(*dst);
1130
1131		rcu_read_lock();
1132		from = rt ? rcu_dereference(rt->from) : NULL;
1133		err = ip6_route_get_saddr(net, from, &fl6->daddr,
1134					  sk ? READ_ONCE(inet6_sk(sk)->srcprefs) : 0,
1135					  fl6->flowi6_l3mdev,
1136					  &fl6->saddr);
1137		rcu_read_unlock();
1138
1139		if (err)
1140			goto out_err_release;
1141
1142		/* If we had an erroneous initial result, pretend it
1143		 * never existed and let the SA-enabled version take
1144		 * over.
1145		 */
1146		if ((*dst)->error) {
1147			dst_release(*dst);
1148			*dst = NULL;
1149		}
1150
1151		if (fl6->flowi6_oif)
1152			flags |= RT6_LOOKUP_F_IFACE;
1153	}
1154
1155	if (!*dst)
1156		*dst = ip6_route_output_flags(net, sk, fl6, flags);
1157
1158	err = (*dst)->error;
1159	if (err)
1160		goto out_err_release;
1161
1162#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1163	/*
1164	 * Here if the dst entry we've looked up
1165	 * has a neighbour entry that is in the INCOMPLETE
1166	 * state and the src address from the flow is
1167	 * marked as OPTIMISTIC, we release the found
1168	 * dst entry and replace it instead with the
1169	 * dst entry of the nexthop router
1170	 */
1171	rt = dst_rt6_info(*dst);
1172	rcu_read_lock();
1173	n = __ipv6_neigh_lookup_noref(rt->dst.dev,
1174				      rt6_nexthop(rt, &fl6->daddr));
1175	err = n && !(READ_ONCE(n->nud_state) & NUD_VALID) ? -EINVAL : 0;
1176	rcu_read_unlock();
1177
1178	if (err) {
1179		struct inet6_ifaddr *ifp;
1180		struct flowi6 fl_gw6;
1181		int redirect;
1182
1183		ifp = ipv6_get_ifaddr(net, &fl6->saddr,
1184				      (*dst)->dev, 1);
1185
1186		redirect = (ifp && ifp->flags & IFA_F_OPTIMISTIC);
1187		if (ifp)
1188			in6_ifa_put(ifp);
1189
1190		if (redirect) {
1191			/*
1192			 * We need to get the dst entry for the
1193			 * default router instead
1194			 */
1195			dst_release(*dst);
1196			memcpy(&fl_gw6, fl6, sizeof(struct flowi6));
1197			memset(&fl_gw6.daddr, 0, sizeof(struct in6_addr));
1198			*dst = ip6_route_output(net, sk, &fl_gw6);
1199			err = (*dst)->error;
1200			if (err)
1201				goto out_err_release;
1202		}
1203	}
1204#endif
1205	if (ipv6_addr_v4mapped(&fl6->saddr) &&
1206	    !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr))) {
1207		err = -EAFNOSUPPORT;
1208		goto out_err_release;
1209	}
1210
1211	return 0;
1212
1213out_err_release:
1214	dst_release(*dst);
1215	*dst = NULL;
1216
1217	if (err == -ENETUNREACH)
1218		IP6_INC_STATS(net, NULL, IPSTATS_MIB_OUTNOROUTES);
1219	return err;
1220}
1221
1222/**
1223 *	ip6_dst_lookup - perform route lookup on flow
1224 *	@net: Network namespace to perform lookup in
1225 *	@sk: socket which provides route info
1226 *	@dst: pointer to dst_entry * for result
1227 *	@fl6: flow to lookup
1228 *
1229 *	This function performs a route lookup on the given flow.
1230 *
1231 *	It returns zero on success, or a standard errno code on error.
1232 */
1233int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst,
1234		   struct flowi6 *fl6)
1235{
1236	*dst = NULL;
1237	return ip6_dst_lookup_tail(net, sk, dst, fl6);
1238}
1239EXPORT_SYMBOL_GPL(ip6_dst_lookup);
1240
1241/**
1242 *	ip6_dst_lookup_flow - perform route lookup on flow with ipsec
1243 *	@net: Network namespace to perform lookup in
1244 *	@sk: socket which provides route info
1245 *	@fl6: flow to lookup
1246 *	@final_dst: final destination address for ipsec lookup
1247 *
1248 *	This function performs a route lookup on the given flow.
1249 *
1250 *	It returns a valid dst pointer on success, or a pointer encoded
1251 *	error code.
1252 */
1253struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6,
1254				      const struct in6_addr *final_dst)
1255{
1256	struct dst_entry *dst = NULL;
1257	int err;
1258
1259	err = ip6_dst_lookup_tail(net, sk, &dst, fl6);
1260	if (err)
1261		return ERR_PTR(err);
1262	if (final_dst)
1263		fl6->daddr = *final_dst;
1264
1265	return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0);
1266}
1267EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
1268
1269/**
1270 *	ip6_sk_dst_lookup_flow - perform socket cached route lookup on flow
1271 *	@sk: socket which provides the dst cache and route info
1272 *	@fl6: flow to lookup
1273 *	@final_dst: final destination address for ipsec lookup
1274 *	@connected: whether @sk is connected or not
1275 *
1276 *	This function performs a route lookup on the given flow with the
1277 *	possibility of using the cached route in the socket if it is valid.
1278 *	It will take the socket dst lock when operating on the dst cache.
1279 *	As a result, this function can only be used in process context.
1280 *
1281 *	In addition, for a connected socket, cache the dst in the socket
1282 *	if the current cache is not valid.
1283 *
1284 *	It returns a valid dst pointer on success, or a pointer encoded
1285 *	error code.
1286 */
1287struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1288					 const struct in6_addr *final_dst,
1289					 bool connected)
1290{
1291	struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
1292
1293	dst = ip6_sk_dst_check(sk, dst, fl6);
1294	if (dst)
1295		return dst;
1296
1297	dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst);
1298	if (connected && !IS_ERR(dst))
1299		ip6_sk_dst_store_flow(sk, dst_clone(dst), fl6);
1300
1301	return dst;
1302}
1303EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
1304
1305static inline struct ipv6_opt_hdr *ip6_opt_dup(struct ipv6_opt_hdr *src,
1306					       gfp_t gfp)
1307{
1308	return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1309}
1310
1311static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
1312						gfp_t gfp)
1313{
1314	return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1315}
1316
1317static void ip6_append_data_mtu(unsigned int *mtu,
1318				int *maxfraglen,
1319				unsigned int fragheaderlen,
1320				struct sk_buff *skb,
1321				struct rt6_info *rt,
1322				unsigned int orig_mtu)
1323{
1324	if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1325		if (!skb) {
1326			/* first fragment, reserve header_len */
1327			*mtu = orig_mtu - rt->dst.header_len;
1328
1329		} else {
1330			/*
1331			 * this fragment is not first, the headers
1332			 * space is regarded as data space.
1333			 */
1334			*mtu = orig_mtu;
1335		}
1336		*maxfraglen = ((*mtu - fragheaderlen) & ~7)
1337			      + fragheaderlen - sizeof(struct frag_hdr);
1338	}
1339}
1340
1341static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
1342			  struct inet6_cork *v6_cork, struct ipcm6_cookie *ipc6,
1343			  struct rt6_info *rt)
1344{
1345	struct ipv6_pinfo *np = inet6_sk(sk);
1346	unsigned int mtu, frag_size;
1347	struct ipv6_txoptions *nopt, *opt = ipc6->opt;
1348
1349	/* callers pass dst together with a reference, set it first so
1350	 * ip6_cork_release() can put it down even in case of an error.
1351	 */
1352	cork->base.dst = &rt->dst;
1353
1354	/*
1355	 * setup for corking
1356	 */
1357	if (opt) {
1358		if (WARN_ON(v6_cork->opt))
1359			return -EINVAL;
1360
1361		nopt = v6_cork->opt = kzalloc(sizeof(*opt), sk->sk_allocation);
1362		if (unlikely(!nopt))
1363			return -ENOBUFS;
1364
1365		nopt->tot_len = sizeof(*opt);
1366		nopt->opt_flen = opt->opt_flen;
1367		nopt->opt_nflen = opt->opt_nflen;
1368
1369		nopt->dst0opt = ip6_opt_dup(opt->dst0opt, sk->sk_allocation);
1370		if (opt->dst0opt && !nopt->dst0opt)
 
1371			return -ENOBUFS;
1372
1373		nopt->dst1opt = ip6_opt_dup(opt->dst1opt, sk->sk_allocation);
1374		if (opt->dst1opt && !nopt->dst1opt)
 
1375			return -ENOBUFS;
1376
1377		nopt->hopopt = ip6_opt_dup(opt->hopopt, sk->sk_allocation);
1378		if (opt->hopopt && !nopt->hopopt)
 
1379			return -ENOBUFS;
1380
1381		nopt->srcrt = ip6_rthdr_dup(opt->srcrt, sk->sk_allocation);
1382		if (opt->srcrt && !nopt->srcrt)
 
1383			return -ENOBUFS;
1384
1385		/* need source address above miyazawa*/
1386	}
 
 
 
1387	v6_cork->hop_limit = ipc6->hlimit;
1388	v6_cork->tclass = ipc6->tclass;
1389	if (rt->dst.flags & DST_XFRM_TUNNEL)
1390		mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ?
1391		      READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
1392	else
1393		mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ?
1394			READ_ONCE(rt->dst.dev->mtu) : dst_mtu(xfrm_dst_path(&rt->dst));
1395
1396	frag_size = READ_ONCE(np->frag_size);
1397	if (frag_size && frag_size < mtu)
1398		mtu = frag_size;
1399
 
1400	cork->base.fragsize = mtu;
1401	cork->base.gso_size = ipc6->gso_size;
1402	cork->base.tx_flags = 0;
1403	cork->base.mark = ipc6->sockc.mark;
1404	sock_tx_timestamp(sk, &ipc6->sockc, &cork->base.tx_flags);
1405	if (ipc6->sockc.tsflags & SOCKCM_FLAG_TS_OPT_ID) {
1406		cork->base.flags |= IPCORK_TS_OPT_ID;
1407		cork->base.ts_opt_id = ipc6->sockc.ts_opt_id;
1408	}
1409	cork->base.length = 0;
1410	cork->base.transmit_time = ipc6->sockc.transmit_time;
1411
1412	return 0;
1413}
1414
1415static int __ip6_append_data(struct sock *sk,
 
1416			     struct sk_buff_head *queue,
1417			     struct inet_cork_full *cork_full,
1418			     struct inet6_cork *v6_cork,
1419			     struct page_frag *pfrag,
1420			     int getfrag(void *from, char *to, int offset,
1421					 int len, int odd, struct sk_buff *skb),
1422			     void *from, size_t length, int transhdrlen,
1423			     unsigned int flags, struct ipcm6_cookie *ipc6)
 
1424{
1425	struct sk_buff *skb, *skb_prev = NULL;
1426	struct inet_cork *cork = &cork_full->base;
1427	struct flowi6 *fl6 = &cork_full->fl.u.ip6;
1428	unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu, pmtu;
1429	struct ubuf_info *uarg = NULL;
1430	int exthdrlen = 0;
1431	int dst_exthdrlen = 0;
1432	int hh_len;
1433	int copy;
1434	int err;
1435	int offset = 0;
1436	bool zc = false;
1437	u32 tskey = 0;
1438	struct rt6_info *rt = dst_rt6_info(cork->dst);
1439	bool paged, hold_tskey = false, extra_uref = false;
1440	struct ipv6_txoptions *opt = v6_cork->opt;
1441	int csummode = CHECKSUM_NONE;
1442	unsigned int maxnonfragsize, headersize;
1443	unsigned int wmem_alloc_delta = 0;
1444
1445	skb = skb_peek_tail(queue);
1446	if (!skb) {
1447		exthdrlen = opt ? opt->opt_flen : 0;
1448		dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
1449	}
1450
1451	paged = !!cork->gso_size;
1452	mtu = cork->gso_size ? IP6_MAX_MTU : cork->fragsize;
1453	orig_mtu = mtu;
1454
1455	hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1456
1457	fragheaderlen = sizeof(struct ipv6hdr) + rt->rt6i_nfheader_len +
1458			(opt ? opt->opt_nflen : 0);
 
 
1459
1460	headersize = sizeof(struct ipv6hdr) +
1461		     (opt ? opt->opt_flen + opt->opt_nflen : 0) +
 
 
1462		     rt->rt6i_nfheader_len;
1463
1464	if (mtu <= fragheaderlen ||
1465	    ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr))
1466		goto emsgsize;
1467
1468	maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen -
1469		     sizeof(struct frag_hdr);
1470
1471	/* as per RFC 7112 section 5, the entire IPv6 Header Chain must fit
1472	 * the first fragment
1473	 */
1474	if (headersize + transhdrlen > mtu)
1475		goto emsgsize;
1476
1477	if (cork->length + length > mtu - headersize && ipc6->dontfrag &&
1478	    (sk->sk_protocol == IPPROTO_UDP ||
1479	     sk->sk_protocol == IPPROTO_ICMPV6 ||
1480	     sk->sk_protocol == IPPROTO_RAW)) {
1481		ipv6_local_rxpmtu(sk, fl6, mtu - headersize +
1482				sizeof(struct ipv6hdr));
1483		goto emsgsize;
1484	}
1485
1486	if (ip6_sk_ignore_df(sk))
1487		maxnonfragsize = sizeof(struct ipv6hdr) + IPV6_MAXPLEN;
1488	else
1489		maxnonfragsize = mtu;
1490
1491	if (cork->length + length > maxnonfragsize - headersize) {
1492emsgsize:
1493		pmtu = max_t(int, mtu - headersize + sizeof(struct ipv6hdr), 0);
1494		ipv6_local_error(sk, EMSGSIZE, fl6, pmtu);
1495		return -EMSGSIZE;
1496	}
1497
1498	/* CHECKSUM_PARTIAL only with no extension headers and when
1499	 * we are not going to fragment
1500	 */
1501	if (transhdrlen && sk->sk_protocol == IPPROTO_UDP &&
1502	    headersize == sizeof(struct ipv6hdr) &&
1503	    length <= mtu - headersize &&
1504	    (!(flags & MSG_MORE) || cork->gso_size) &&
1505	    rt->dst.dev->features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))
1506		csummode = CHECKSUM_PARTIAL;
1507
1508	if ((flags & MSG_ZEROCOPY) && length) {
1509		struct msghdr *msg = from;
1510
1511		if (getfrag == ip_generic_getfrag && msg->msg_ubuf) {
1512			if (skb_zcopy(skb) && msg->msg_ubuf != skb_zcopy(skb))
1513				return -EINVAL;
1514
1515			/* Leave uarg NULL if can't zerocopy, callers should
1516			 * be able to handle it.
1517			 */
1518			if ((rt->dst.dev->features & NETIF_F_SG) &&
1519			    csummode == CHECKSUM_PARTIAL) {
1520				paged = true;
1521				zc = true;
1522				uarg = msg->msg_ubuf;
1523			}
1524		} else if (sock_flag(sk, SOCK_ZEROCOPY)) {
1525			uarg = msg_zerocopy_realloc(sk, length, skb_zcopy(skb));
1526			if (!uarg)
1527				return -ENOBUFS;
1528			extra_uref = !skb_zcopy(skb);	/* only ref on new uarg */
1529			if (rt->dst.dev->features & NETIF_F_SG &&
1530			    csummode == CHECKSUM_PARTIAL) {
1531				paged = true;
1532				zc = true;
1533			} else {
1534				uarg_to_msgzc(uarg)->zerocopy = 0;
1535				skb_zcopy_set(skb, uarg, &extra_uref);
1536			}
1537		}
1538	} else if ((flags & MSG_SPLICE_PAGES) && length) {
1539		if (inet_test_bit(HDRINCL, sk))
1540			return -EPERM;
1541		if (rt->dst.dev->features & NETIF_F_SG &&
1542		    getfrag == ip_generic_getfrag)
1543			/* We need an empty buffer to attach stuff to */
1544			paged = true;
1545		else
1546			flags &= ~MSG_SPLICE_PAGES;
1547	}
1548
1549	if (cork->tx_flags & SKBTX_ANY_TSTAMP &&
1550	    READ_ONCE(sk->sk_tsflags) & SOF_TIMESTAMPING_OPT_ID) {
1551		if (cork->flags & IPCORK_TS_OPT_ID) {
1552			tskey = cork->ts_opt_id;
1553		} else {
1554			tskey = atomic_inc_return(&sk->sk_tskey) - 1;
1555			hold_tskey = true;
1556		}
1557	}
1558
1559	/*
1560	 * Let's try using as much space as possible.
1561	 * Use MTU if total length of the message fits into the MTU.
1562	 * Otherwise, we need to reserve fragment header and
1563	 * fragment alignment (= 8-15 octects, in total).
1564	 *
1565	 * Note that we may need to "move" the data from the tail
1566	 * of the buffer to the new fragment when we split
1567	 * the message.
1568	 *
1569	 * FIXME: It may be fragmented into multiple chunks
1570	 *        at once if non-fragmentable extension headers
1571	 *        are too large.
1572	 * --yoshfuji
1573	 */
1574
1575	cork->length += length;
1576	if (!skb)
1577		goto alloc_new_skb;
1578
1579	while (length > 0) {
1580		/* Check if the remaining data fits into current packet. */
1581		copy = (cork->length <= mtu ? mtu : maxfraglen) - skb->len;
1582		if (copy < length)
1583			copy = maxfraglen - skb->len;
1584
1585		if (copy <= 0) {
1586			char *data;
1587			unsigned int datalen;
1588			unsigned int fraglen;
1589			unsigned int fraggap;
1590			unsigned int alloclen, alloc_extra;
1591			unsigned int pagedlen;
1592alloc_new_skb:
1593			/* There's no room in the current skb */
1594			if (skb)
1595				fraggap = skb->len - maxfraglen;
1596			else
1597				fraggap = 0;
1598			/* update mtu and maxfraglen if necessary */
1599			if (!skb || !skb_prev)
1600				ip6_append_data_mtu(&mtu, &maxfraglen,
1601						    fragheaderlen, skb, rt,
1602						    orig_mtu);
1603
1604			skb_prev = skb;
1605
1606			/*
1607			 * If remaining data exceeds the mtu,
1608			 * we know we need more fragment(s).
1609			 */
1610			datalen = length + fraggap;
1611
1612			if (datalen > (cork->length <= mtu ? mtu : maxfraglen) - fragheaderlen)
1613				datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
1614			fraglen = datalen + fragheaderlen;
1615			pagedlen = 0;
1616
1617			alloc_extra = hh_len;
1618			alloc_extra += dst_exthdrlen;
1619			alloc_extra += rt->dst.trailer_len;
1620
1621			/* We just reserve space for fragment header.
1622			 * Note: this may be overallocation if the message
1623			 * (without MSG_MORE) fits into the MTU.
1624			 */
1625			alloc_extra += sizeof(struct frag_hdr);
1626
1627			if ((flags & MSG_MORE) &&
1628			    !(rt->dst.dev->features&NETIF_F_SG))
1629				alloclen = mtu;
1630			else if (!paged &&
1631				 (fraglen + alloc_extra < SKB_MAX_ALLOC ||
1632				  !(rt->dst.dev->features & NETIF_F_SG)))
1633				alloclen = fraglen;
1634			else {
1635				alloclen = fragheaderlen + transhdrlen;
1636				pagedlen = datalen - transhdrlen;
1637			}
1638			alloclen += alloc_extra;
1639
1640			if (datalen != length + fraggap) {
1641				/*
1642				 * this is not the last fragment, the trailer
1643				 * space is regarded as data space.
1644				 */
1645				datalen += rt->dst.trailer_len;
1646			}
1647
 
1648			fraglen = datalen + fragheaderlen;
1649
1650			copy = datalen - transhdrlen - fraggap - pagedlen;
1651			/* [!] NOTE: copy may be negative if pagedlen>0
1652			 * because then the equation may reduces to -fraggap.
 
1653			 */
1654			if (copy < 0 && !(flags & MSG_SPLICE_PAGES)) {
 
 
 
1655				err = -EINVAL;
1656				goto error;
1657			}
1658			if (transhdrlen) {
1659				skb = sock_alloc_send_skb(sk, alloclen,
 
1660						(flags & MSG_DONTWAIT), &err);
1661			} else {
1662				skb = NULL;
1663				if (refcount_read(&sk->sk_wmem_alloc) + wmem_alloc_delta <=
1664				    2 * sk->sk_sndbuf)
1665					skb = alloc_skb(alloclen,
1666							sk->sk_allocation);
1667				if (unlikely(!skb))
1668					err = -ENOBUFS;
1669			}
1670			if (!skb)
1671				goto error;
1672			/*
1673			 *	Fill in the control structures
1674			 */
1675			skb->protocol = htons(ETH_P_IPV6);
1676			skb->ip_summed = csummode;
1677			skb->csum = 0;
1678			/* reserve for fragmentation and ipsec header */
1679			skb_reserve(skb, hh_len + sizeof(struct frag_hdr) +
1680				    dst_exthdrlen);
1681
 
 
 
 
 
 
1682			/*
1683			 *	Find where to start putting bytes
1684			 */
1685			data = skb_put(skb, fraglen - pagedlen);
1686			skb_set_network_header(skb, exthdrlen);
1687			data += fragheaderlen;
1688			skb->transport_header = (skb->network_header +
1689						 fragheaderlen);
1690			if (fraggap) {
1691				skb->csum = skb_copy_and_csum_bits(
1692					skb_prev, maxfraglen,
1693					data + transhdrlen, fraggap);
1694				skb_prev->csum = csum_sub(skb_prev->csum,
1695							  skb->csum);
1696				data += fraggap;
1697				pskb_trim_unique(skb_prev, maxfraglen);
1698			}
1699			if (copy > 0 &&
1700			    getfrag(from, data + transhdrlen, offset,
1701				    copy, fraggap, skb) < 0) {
1702				err = -EFAULT;
1703				kfree_skb(skb);
1704				goto error;
1705			} else if (flags & MSG_SPLICE_PAGES) {
1706				copy = 0;
1707			}
1708
1709			offset += copy;
1710			length -= copy + transhdrlen;
1711			transhdrlen = 0;
1712			exthdrlen = 0;
1713			dst_exthdrlen = 0;
1714
1715			/* Only the initial fragment is time stamped */
1716			skb_shinfo(skb)->tx_flags = cork->tx_flags;
1717			cork->tx_flags = 0;
1718			skb_shinfo(skb)->tskey = tskey;
1719			tskey = 0;
1720			skb_zcopy_set(skb, uarg, &extra_uref);
1721
1722			if ((flags & MSG_CONFIRM) && !skb_prev)
1723				skb_set_dst_pending_confirm(skb, 1);
1724
1725			/*
1726			 * Put the packet on the pending queue
1727			 */
1728			if (!skb->destructor) {
1729				skb->destructor = sock_wfree;
1730				skb->sk = sk;
1731				wmem_alloc_delta += skb->truesize;
1732			}
1733			__skb_queue_tail(queue, skb);
1734			continue;
1735		}
1736
1737		if (copy > length)
1738			copy = length;
1739
1740		if (!(rt->dst.dev->features&NETIF_F_SG) &&
1741		    skb_tailroom(skb) >= copy) {
1742			unsigned int off;
1743
1744			off = skb->len;
1745			if (getfrag(from, skb_put(skb, copy),
1746						offset, copy, off, skb) < 0) {
1747				__skb_trim(skb, off);
1748				err = -EFAULT;
1749				goto error;
1750			}
1751		} else if (flags & MSG_SPLICE_PAGES) {
1752			struct msghdr *msg = from;
1753
1754			err = -EIO;
1755			if (WARN_ON_ONCE(copy > msg->msg_iter.count))
1756				goto error;
1757
1758			err = skb_splice_from_iter(skb, &msg->msg_iter, copy,
1759						   sk->sk_allocation);
1760			if (err < 0)
1761				goto error;
1762			copy = err;
1763			wmem_alloc_delta += copy;
1764		} else if (!zc) {
1765			int i = skb_shinfo(skb)->nr_frags;
1766
1767			err = -ENOMEM;
1768			if (!sk_page_frag_refill(sk, pfrag))
1769				goto error;
1770
1771			skb_zcopy_downgrade_managed(skb);
1772			if (!skb_can_coalesce(skb, i, pfrag->page,
1773					      pfrag->offset)) {
1774				err = -EMSGSIZE;
1775				if (i == MAX_SKB_FRAGS)
1776					goto error;
1777
1778				__skb_fill_page_desc(skb, i, pfrag->page,
1779						     pfrag->offset, 0);
1780				skb_shinfo(skb)->nr_frags = ++i;
1781				get_page(pfrag->page);
1782			}
1783			copy = min_t(int, copy, pfrag->size - pfrag->offset);
1784			if (getfrag(from,
1785				    page_address(pfrag->page) + pfrag->offset,
1786				    offset, copy, skb->len, skb) < 0)
1787				goto error_efault;
1788
1789			pfrag->offset += copy;
1790			skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
1791			skb->len += copy;
1792			skb->data_len += copy;
1793			skb->truesize += copy;
1794			wmem_alloc_delta += copy;
1795		} else {
1796			err = skb_zerocopy_iter_dgram(skb, from, copy);
1797			if (err < 0)
1798				goto error;
1799		}
1800		offset += copy;
1801		length -= copy;
1802	}
1803
1804	if (wmem_alloc_delta)
1805		refcount_add(wmem_alloc_delta, &sk->sk_wmem_alloc);
1806	return 0;
1807
1808error_efault:
1809	err = -EFAULT;
1810error:
1811	net_zcopy_put_abort(uarg, extra_uref);
1812	cork->length -= length;
1813	IP6_INC_STATS(sock_net(sk), rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS);
1814	refcount_add(wmem_alloc_delta, &sk->sk_wmem_alloc);
1815	if (hold_tskey)
1816		atomic_dec(&sk->sk_tskey);
1817	return err;
1818}
1819
1820int ip6_append_data(struct sock *sk,
1821		    int getfrag(void *from, char *to, int offset, int len,
1822				int odd, struct sk_buff *skb),
1823		    void *from, size_t length, int transhdrlen,
1824		    struct ipcm6_cookie *ipc6, struct flowi6 *fl6,
1825		    struct rt6_info *rt, unsigned int flags)
 
1826{
1827	struct inet_sock *inet = inet_sk(sk);
1828	struct ipv6_pinfo *np = inet6_sk(sk);
1829	int exthdrlen;
1830	int err;
1831
1832	if (flags&MSG_PROBE)
1833		return 0;
1834	if (skb_queue_empty(&sk->sk_write_queue)) {
1835		/*
1836		 * setup for corking
1837		 */
1838		dst_hold(&rt->dst);
1839		err = ip6_setup_cork(sk, &inet->cork, &np->cork,
1840				     ipc6, rt);
1841		if (err)
1842			return err;
1843
1844		inet->cork.fl.u.ip6 = *fl6;
1845		exthdrlen = (ipc6->opt ? ipc6->opt->opt_flen : 0);
1846		length += exthdrlen;
1847		transhdrlen += exthdrlen;
1848	} else {
 
1849		transhdrlen = 0;
1850	}
1851
1852	return __ip6_append_data(sk, &sk->sk_write_queue, &inet->cork,
1853				 &np->cork, sk_page_frag(sk), getfrag,
1854				 from, length, transhdrlen, flags, ipc6);
1855}
1856EXPORT_SYMBOL_GPL(ip6_append_data);
1857
1858static void ip6_cork_steal_dst(struct sk_buff *skb, struct inet_cork_full *cork)
1859{
1860	struct dst_entry *dst = cork->base.dst;
1861
1862	cork->base.dst = NULL;
1863	skb_dst_set(skb, dst);
1864}
1865
1866static void ip6_cork_release(struct inet_cork_full *cork,
1867			     struct inet6_cork *v6_cork)
1868{
1869	if (v6_cork->opt) {
1870		struct ipv6_txoptions *opt = v6_cork->opt;
1871
1872		kfree(opt->dst0opt);
1873		kfree(opt->dst1opt);
1874		kfree(opt->hopopt);
1875		kfree(opt->srcrt);
1876		kfree(opt);
1877		v6_cork->opt = NULL;
1878	}
1879
1880	if (cork->base.dst) {
1881		dst_release(cork->base.dst);
1882		cork->base.dst = NULL;
 
1883	}
 
1884}
1885
1886struct sk_buff *__ip6_make_skb(struct sock *sk,
1887			       struct sk_buff_head *queue,
1888			       struct inet_cork_full *cork,
1889			       struct inet6_cork *v6_cork)
1890{
1891	struct sk_buff *skb, *tmp_skb;
1892	struct sk_buff **tail_skb;
1893	struct in6_addr *final_dst;
 
1894	struct net *net = sock_net(sk);
1895	struct ipv6hdr *hdr;
1896	struct ipv6_txoptions *opt = v6_cork->opt;
1897	struct rt6_info *rt = dst_rt6_info(cork->base.dst);
1898	struct flowi6 *fl6 = &cork->fl.u.ip6;
1899	unsigned char proto = fl6->flowi6_proto;
1900
1901	skb = __skb_dequeue(queue);
1902	if (!skb)
1903		goto out;
1904	tail_skb = &(skb_shinfo(skb)->frag_list);
1905
1906	/* move skb->data to ip header from ext header */
1907	if (skb->data < skb_network_header(skb))
1908		__skb_pull(skb, skb_network_offset(skb));
1909	while ((tmp_skb = __skb_dequeue(queue)) != NULL) {
1910		__skb_pull(tmp_skb, skb_network_header_len(skb));
1911		*tail_skb = tmp_skb;
1912		tail_skb = &(tmp_skb->next);
1913		skb->len += tmp_skb->len;
1914		skb->data_len += tmp_skb->len;
1915		skb->truesize += tmp_skb->truesize;
1916		tmp_skb->destructor = NULL;
1917		tmp_skb->sk = NULL;
1918	}
1919
1920	/* Allow local fragmentation. */
1921	skb->ignore_df = ip6_sk_ignore_df(sk);
 
 
1922	__skb_pull(skb, skb_network_header_len(skb));
1923
1924	final_dst = &fl6->daddr;
1925	if (opt && opt->opt_flen)
1926		ipv6_push_frag_opts(skb, opt, &proto);
1927	if (opt && opt->opt_nflen)
1928		ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst, &fl6->saddr);
1929
1930	skb_push(skb, sizeof(struct ipv6hdr));
1931	skb_reset_network_header(skb);
1932	hdr = ipv6_hdr(skb);
1933
1934	ip6_flow_hdr(hdr, v6_cork->tclass,
1935		     ip6_make_flowlabel(net, skb, fl6->flowlabel,
1936					ip6_autoflowlabel(net, sk), fl6));
1937	hdr->hop_limit = v6_cork->hop_limit;
1938	hdr->nexthdr = proto;
1939	hdr->saddr = fl6->saddr;
1940	hdr->daddr = *final_dst;
1941
1942	skb->priority = READ_ONCE(sk->sk_priority);
1943	skb->mark = cork->base.mark;
1944	if (sk_is_tcp(sk))
1945		skb_set_delivery_time(skb, cork->base.transmit_time, SKB_CLOCK_MONOTONIC);
1946	else
1947		skb_set_delivery_type_by_clockid(skb, cork->base.transmit_time, sk->sk_clockid);
1948
1949	ip6_cork_steal_dst(skb, cork);
1950	IP6_INC_STATS(net, rt->rt6i_idev, IPSTATS_MIB_OUTREQUESTS);
1951	if (proto == IPPROTO_ICMPV6) {
1952		struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
1953		u8 icmp6_type;
1954
1955		if (sk->sk_socket->type == SOCK_RAW &&
1956		   !(fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH))
1957			icmp6_type = fl6->fl6_icmp_type;
1958		else
1959			icmp6_type = icmp6_hdr(skb)->icmp6_type;
1960		ICMP6MSGOUT_INC_STATS(net, idev, icmp6_type);
1961		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
1962	}
1963
1964	ip6_cork_release(cork, v6_cork);
1965out:
1966	return skb;
1967}
1968
1969int ip6_send_skb(struct sk_buff *skb)
1970{
1971	struct net *net = sock_net(skb->sk);
1972	struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
1973	int err;
1974
1975	rcu_read_lock();
1976	err = ip6_local_out(net, skb->sk, skb);
1977	if (err) {
1978		if (err > 0)
1979			err = net_xmit_errno(err);
1980		if (err)
1981			IP6_INC_STATS(net, rt->rt6i_idev,
1982				      IPSTATS_MIB_OUTDISCARDS);
1983	}
1984
1985	rcu_read_unlock();
1986	return err;
1987}
1988
1989int ip6_push_pending_frames(struct sock *sk)
1990{
1991	struct sk_buff *skb;
1992
1993	skb = ip6_finish_skb(sk);
1994	if (!skb)
1995		return 0;
1996
1997	return ip6_send_skb(skb);
1998}
1999EXPORT_SYMBOL_GPL(ip6_push_pending_frames);
2000
2001static void __ip6_flush_pending_frames(struct sock *sk,
2002				       struct sk_buff_head *queue,
2003				       struct inet_cork_full *cork,
2004				       struct inet6_cork *v6_cork)
2005{
2006	struct sk_buff *skb;
2007
2008	while ((skb = __skb_dequeue_tail(queue)) != NULL) {
2009		if (skb_dst(skb))
2010			IP6_INC_STATS(sock_net(sk), ip6_dst_idev(skb_dst(skb)),
2011				      IPSTATS_MIB_OUTDISCARDS);
2012		kfree_skb(skb);
2013	}
2014
2015	ip6_cork_release(cork, v6_cork);
2016}
2017
2018void ip6_flush_pending_frames(struct sock *sk)
2019{
2020	__ip6_flush_pending_frames(sk, &sk->sk_write_queue,
2021				   &inet_sk(sk)->cork, &inet6_sk(sk)->cork);
2022}
2023EXPORT_SYMBOL_GPL(ip6_flush_pending_frames);
2024
2025struct sk_buff *ip6_make_skb(struct sock *sk,
2026			     int getfrag(void *from, char *to, int offset,
2027					 int len, int odd, struct sk_buff *skb),
2028			     void *from, size_t length, int transhdrlen,
2029			     struct ipcm6_cookie *ipc6, struct rt6_info *rt,
2030			     unsigned int flags, struct inet_cork_full *cork)
 
2031{
 
2032	struct inet6_cork v6_cork;
2033	struct sk_buff_head queue;
2034	int exthdrlen = (ipc6->opt ? ipc6->opt->opt_flen : 0);
2035	int err;
2036
2037	if (flags & MSG_PROBE) {
2038		dst_release(&rt->dst);
2039		return NULL;
2040	}
2041
2042	__skb_queue_head_init(&queue);
2043
2044	cork->base.flags = 0;
2045	cork->base.addr = 0;
2046	cork->base.opt = NULL;
 
2047	v6_cork.opt = NULL;
2048	err = ip6_setup_cork(sk, cork, &v6_cork, ipc6, rt);
2049	if (err) {
2050		ip6_cork_release(cork, &v6_cork);
2051		return ERR_PTR(err);
2052	}
2053	if (ipc6->dontfrag < 0)
2054		ipc6->dontfrag = inet6_test_bit(DONTFRAG, sk);
2055
2056	err = __ip6_append_data(sk, &queue, cork, &v6_cork,
2057				&current->task_frag, getfrag, from,
2058				length + exthdrlen, transhdrlen + exthdrlen,
2059				flags, ipc6);
2060	if (err) {
2061		__ip6_flush_pending_frames(sk, &queue, cork, &v6_cork);
2062		return ERR_PTR(err);
2063	}
2064
2065	return __ip6_make_skb(sk, &queue, cork, &v6_cork);
2066}