Linux Audio

Check our new training course

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