xref: /linux/net/ipv4/route.c (revision b04df400c30235fa347313c9e2a0695549bd2c8e)
1 /*
2  * INET		An implementation of the TCP/IP protocol suite for the LINUX
3  *		operating system.  INET is implemented using the  BSD Socket
4  *		interface as the means of communication with the user level.
5  *
6  *		ROUTE - implementation of the IP router.
7  *
8  * Authors:	Ross Biro
9  *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
10  *		Alan Cox, <gw4pts@gw4pts.ampr.org>
11  *		Linus Torvalds, <Linus.Torvalds@helsinki.fi>
12  *		Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
13  *
14  * Fixes:
15  *		Alan Cox	:	Verify area fixes.
16  *		Alan Cox	:	cli() protects routing changes
17  *		Rui Oliveira	:	ICMP routing table updates
18  *		(rco@di.uminho.pt)	Routing table insertion and update
19  *		Linus Torvalds	:	Rewrote bits to be sensible
20  *		Alan Cox	:	Added BSD route gw semantics
21  *		Alan Cox	:	Super /proc >4K
22  *		Alan Cox	:	MTU in route table
23  *		Alan Cox	: 	MSS actually. Also added the window
24  *					clamper.
25  *		Sam Lantinga	:	Fixed route matching in rt_del()
26  *		Alan Cox	:	Routing cache support.
27  *		Alan Cox	:	Removed compatibility cruft.
28  *		Alan Cox	:	RTF_REJECT support.
29  *		Alan Cox	:	TCP irtt support.
30  *		Jonathan Naylor	:	Added Metric support.
31  *	Miquel van Smoorenburg	:	BSD API fixes.
32  *	Miquel van Smoorenburg	:	Metrics.
33  *		Alan Cox	:	Use __u32 properly
34  *		Alan Cox	:	Aligned routing errors more closely with BSD
35  *					our system is still very different.
36  *		Alan Cox	:	Faster /proc handling
37  *	Alexey Kuznetsov	:	Massive rework to support tree based routing,
38  *					routing caches and better behaviour.
39  *
40  *		Olaf Erb	:	irtt wasn't being copied right.
41  *		Bjorn Ekwall	:	Kerneld route support.
42  *		Alan Cox	:	Multicast fixed (I hope)
43  * 		Pavel Krauz	:	Limited broadcast fixed
44  *		Mike McLagan	:	Routing by source
45  *	Alexey Kuznetsov	:	End of old history. Split to fib.c and
46  *					route.c and rewritten from scratch.
47  *		Andi Kleen	:	Load-limit warning messages.
48  *	Vitaly E. Lavrov	:	Transparent proxy revived after year coma.
49  *	Vitaly E. Lavrov	:	Race condition in ip_route_input_slow.
50  *	Tobias Ringstrom	:	Uninitialized res.type in ip_route_output_slow.
51  *	Vladimir V. Ivanov	:	IP rule info (flowid) is really useful.
52  *		Marc Boucher	:	routing by fwmark
53  *	Robert Olsson		:	Added rt_cache statistics
54  *	Arnaldo C. Melo		:	Convert proc stuff to seq_file
55  *	Eric Dumazet		:	hashed spinlocks and rt_check_expire() fixes.
56  * 	Ilia Sotnikov		:	Ignore TOS on PMTUD and Redirect
57  * 	Ilia Sotnikov		:	Removed TOS from hash calculations
58  *
59  *		This program is free software; you can redistribute it and/or
60  *		modify it under the terms of the GNU General Public License
61  *		as published by the Free Software Foundation; either version
62  *		2 of the License, or (at your option) any later version.
63  */
64 
65 #define pr_fmt(fmt) "IPv4: " fmt
66 
67 #include <linux/module.h>
68 #include <linux/uaccess.h>
69 #include <linux/bitops.h>
70 #include <linux/types.h>
71 #include <linux/kernel.h>
72 #include <linux/mm.h>
73 #include <linux/string.h>
74 #include <linux/socket.h>
75 #include <linux/sockios.h>
76 #include <linux/errno.h>
77 #include <linux/in.h>
78 #include <linux/inet.h>
79 #include <linux/netdevice.h>
80 #include <linux/proc_fs.h>
81 #include <linux/init.h>
82 #include <linux/skbuff.h>
83 #include <linux/inetdevice.h>
84 #include <linux/igmp.h>
85 #include <linux/pkt_sched.h>
86 #include <linux/mroute.h>
87 #include <linux/netfilter_ipv4.h>
88 #include <linux/random.h>
89 #include <linux/rcupdate.h>
90 #include <linux/times.h>
91 #include <linux/slab.h>
92 #include <linux/jhash.h>
93 #include <net/dst.h>
94 #include <net/dst_metadata.h>
95 #include <net/net_namespace.h>
96 #include <net/protocol.h>
97 #include <net/ip.h>
98 #include <net/route.h>
99 #include <net/inetpeer.h>
100 #include <net/sock.h>
101 #include <net/ip_fib.h>
102 #include <net/arp.h>
103 #include <net/tcp.h>
104 #include <net/icmp.h>
105 #include <net/xfrm.h>
106 #include <net/lwtunnel.h>
107 #include <net/netevent.h>
108 #include <net/rtnetlink.h>
109 #ifdef CONFIG_SYSCTL
110 #include <linux/sysctl.h>
111 #endif
112 #include <net/secure_seq.h>
113 #include <net/ip_tunnels.h>
114 #include <net/l3mdev.h>
115 
116 #include "fib_lookup.h"
117 
118 #define RT_FL_TOS(oldflp4) \
119 	((oldflp4)->flowi4_tos & (IPTOS_RT_MASK | RTO_ONLINK))
120 
121 #define RT_GC_TIMEOUT (300*HZ)
122 
123 static int ip_rt_max_size;
124 static int ip_rt_redirect_number __read_mostly	= 9;
125 static int ip_rt_redirect_load __read_mostly	= HZ / 50;
126 static int ip_rt_redirect_silence __read_mostly	= ((HZ / 50) << (9 + 1));
127 static int ip_rt_error_cost __read_mostly	= HZ;
128 static int ip_rt_error_burst __read_mostly	= 5 * HZ;
129 static int ip_rt_mtu_expires __read_mostly	= 10 * 60 * HZ;
130 static u32 ip_rt_min_pmtu __read_mostly		= 512 + 20 + 20;
131 static int ip_rt_min_advmss __read_mostly	= 256;
132 
133 static int ip_rt_gc_timeout __read_mostly	= RT_GC_TIMEOUT;
134 
135 /*
136  *	Interface to generic destination cache.
137  */
138 
139 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie);
140 static unsigned int	 ipv4_default_advmss(const struct dst_entry *dst);
141 static unsigned int	 ipv4_mtu(const struct dst_entry *dst);
142 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
143 static void		 ipv4_link_failure(struct sk_buff *skb);
144 static void		 ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
145 					   struct sk_buff *skb, u32 mtu);
146 static void		 ip_do_redirect(struct dst_entry *dst, struct sock *sk,
147 					struct sk_buff *skb);
148 static void		ipv4_dst_destroy(struct dst_entry *dst);
149 
150 static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old)
151 {
152 	WARN_ON(1);
153 	return NULL;
154 }
155 
156 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
157 					   struct sk_buff *skb,
158 					   const void *daddr);
159 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr);
160 
161 static struct dst_ops ipv4_dst_ops = {
162 	.family =		AF_INET,
163 	.check =		ipv4_dst_check,
164 	.default_advmss =	ipv4_default_advmss,
165 	.mtu =			ipv4_mtu,
166 	.cow_metrics =		ipv4_cow_metrics,
167 	.destroy =		ipv4_dst_destroy,
168 	.negative_advice =	ipv4_negative_advice,
169 	.link_failure =		ipv4_link_failure,
170 	.update_pmtu =		ip_rt_update_pmtu,
171 	.redirect =		ip_do_redirect,
172 	.local_out =		__ip_local_out,
173 	.neigh_lookup =		ipv4_neigh_lookup,
174 	.confirm_neigh =	ipv4_confirm_neigh,
175 };
176 
177 #define ECN_OR_COST(class)	TC_PRIO_##class
178 
179 const __u8 ip_tos2prio[16] = {
180 	TC_PRIO_BESTEFFORT,
181 	ECN_OR_COST(BESTEFFORT),
182 	TC_PRIO_BESTEFFORT,
183 	ECN_OR_COST(BESTEFFORT),
184 	TC_PRIO_BULK,
185 	ECN_OR_COST(BULK),
186 	TC_PRIO_BULK,
187 	ECN_OR_COST(BULK),
188 	TC_PRIO_INTERACTIVE,
189 	ECN_OR_COST(INTERACTIVE),
190 	TC_PRIO_INTERACTIVE,
191 	ECN_OR_COST(INTERACTIVE),
192 	TC_PRIO_INTERACTIVE_BULK,
193 	ECN_OR_COST(INTERACTIVE_BULK),
194 	TC_PRIO_INTERACTIVE_BULK,
195 	ECN_OR_COST(INTERACTIVE_BULK)
196 };
197 EXPORT_SYMBOL(ip_tos2prio);
198 
199 static DEFINE_PER_CPU(struct rt_cache_stat, rt_cache_stat);
200 #define RT_CACHE_STAT_INC(field) raw_cpu_inc(rt_cache_stat.field)
201 
202 #ifdef CONFIG_PROC_FS
203 static void *rt_cache_seq_start(struct seq_file *seq, loff_t *pos)
204 {
205 	if (*pos)
206 		return NULL;
207 	return SEQ_START_TOKEN;
208 }
209 
210 static void *rt_cache_seq_next(struct seq_file *seq, void *v, loff_t *pos)
211 {
212 	++*pos;
213 	return NULL;
214 }
215 
216 static void rt_cache_seq_stop(struct seq_file *seq, void *v)
217 {
218 }
219 
220 static int rt_cache_seq_show(struct seq_file *seq, void *v)
221 {
222 	if (v == SEQ_START_TOKEN)
223 		seq_printf(seq, "%-127s\n",
224 			   "Iface\tDestination\tGateway \tFlags\t\tRefCnt\tUse\t"
225 			   "Metric\tSource\t\tMTU\tWindow\tIRTT\tTOS\tHHRef\t"
226 			   "HHUptod\tSpecDst");
227 	return 0;
228 }
229 
230 static const struct seq_operations rt_cache_seq_ops = {
231 	.start  = rt_cache_seq_start,
232 	.next   = rt_cache_seq_next,
233 	.stop   = rt_cache_seq_stop,
234 	.show   = rt_cache_seq_show,
235 };
236 
237 static int rt_cache_seq_open(struct inode *inode, struct file *file)
238 {
239 	return seq_open(file, &rt_cache_seq_ops);
240 }
241 
242 static const struct file_operations rt_cache_seq_fops = {
243 	.open	 = rt_cache_seq_open,
244 	.read	 = seq_read,
245 	.llseek	 = seq_lseek,
246 	.release = seq_release,
247 };
248 
249 
250 static void *rt_cpu_seq_start(struct seq_file *seq, loff_t *pos)
251 {
252 	int cpu;
253 
254 	if (*pos == 0)
255 		return SEQ_START_TOKEN;
256 
257 	for (cpu = *pos-1; cpu < nr_cpu_ids; ++cpu) {
258 		if (!cpu_possible(cpu))
259 			continue;
260 		*pos = cpu+1;
261 		return &per_cpu(rt_cache_stat, cpu);
262 	}
263 	return NULL;
264 }
265 
266 static void *rt_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos)
267 {
268 	int cpu;
269 
270 	for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {
271 		if (!cpu_possible(cpu))
272 			continue;
273 		*pos = cpu+1;
274 		return &per_cpu(rt_cache_stat, cpu);
275 	}
276 	return NULL;
277 
278 }
279 
280 static void rt_cpu_seq_stop(struct seq_file *seq, void *v)
281 {
282 
283 }
284 
285 static int rt_cpu_seq_show(struct seq_file *seq, void *v)
286 {
287 	struct rt_cache_stat *st = v;
288 
289 	if (v == SEQ_START_TOKEN) {
290 		seq_printf(seq, "entries  in_hit in_slow_tot in_slow_mc in_no_route in_brd in_martian_dst in_martian_src  out_hit out_slow_tot out_slow_mc  gc_total gc_ignored gc_goal_miss gc_dst_overflow in_hlist_search out_hlist_search\n");
291 		return 0;
292 	}
293 
294 	seq_printf(seq,"%08x  %08x %08x %08x %08x %08x %08x %08x "
295 		   " %08x %08x %08x %08x %08x %08x %08x %08x %08x \n",
296 		   dst_entries_get_slow(&ipv4_dst_ops),
297 		   0, /* st->in_hit */
298 		   st->in_slow_tot,
299 		   st->in_slow_mc,
300 		   st->in_no_route,
301 		   st->in_brd,
302 		   st->in_martian_dst,
303 		   st->in_martian_src,
304 
305 		   0, /* st->out_hit */
306 		   st->out_slow_tot,
307 		   st->out_slow_mc,
308 
309 		   0, /* st->gc_total */
310 		   0, /* st->gc_ignored */
311 		   0, /* st->gc_goal_miss */
312 		   0, /* st->gc_dst_overflow */
313 		   0, /* st->in_hlist_search */
314 		   0  /* st->out_hlist_search */
315 		);
316 	return 0;
317 }
318 
319 static const struct seq_operations rt_cpu_seq_ops = {
320 	.start  = rt_cpu_seq_start,
321 	.next   = rt_cpu_seq_next,
322 	.stop   = rt_cpu_seq_stop,
323 	.show   = rt_cpu_seq_show,
324 };
325 
326 
327 static int rt_cpu_seq_open(struct inode *inode, struct file *file)
328 {
329 	return seq_open(file, &rt_cpu_seq_ops);
330 }
331 
332 static const struct file_operations rt_cpu_seq_fops = {
333 	.open	 = rt_cpu_seq_open,
334 	.read	 = seq_read,
335 	.llseek	 = seq_lseek,
336 	.release = seq_release,
337 };
338 
339 #ifdef CONFIG_IP_ROUTE_CLASSID
340 static int rt_acct_proc_show(struct seq_file *m, void *v)
341 {
342 	struct ip_rt_acct *dst, *src;
343 	unsigned int i, j;
344 
345 	dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL);
346 	if (!dst)
347 		return -ENOMEM;
348 
349 	for_each_possible_cpu(i) {
350 		src = (struct ip_rt_acct *)per_cpu_ptr(ip_rt_acct, i);
351 		for (j = 0; j < 256; j++) {
352 			dst[j].o_bytes   += src[j].o_bytes;
353 			dst[j].o_packets += src[j].o_packets;
354 			dst[j].i_bytes   += src[j].i_bytes;
355 			dst[j].i_packets += src[j].i_packets;
356 		}
357 	}
358 
359 	seq_write(m, dst, 256 * sizeof(struct ip_rt_acct));
360 	kfree(dst);
361 	return 0;
362 }
363 
364 static int rt_acct_proc_open(struct inode *inode, struct file *file)
365 {
366 	return single_open(file, rt_acct_proc_show, NULL);
367 }
368 
369 static const struct file_operations rt_acct_proc_fops = {
370 	.open		= rt_acct_proc_open,
371 	.read		= seq_read,
372 	.llseek		= seq_lseek,
373 	.release	= single_release,
374 };
375 #endif
376 
377 static int __net_init ip_rt_do_proc_init(struct net *net)
378 {
379 	struct proc_dir_entry *pde;
380 
381 	pde = proc_create("rt_cache", 0444, net->proc_net,
382 			  &rt_cache_seq_fops);
383 	if (!pde)
384 		goto err1;
385 
386 	pde = proc_create("rt_cache", 0444,
387 			  net->proc_net_stat, &rt_cpu_seq_fops);
388 	if (!pde)
389 		goto err2;
390 
391 #ifdef CONFIG_IP_ROUTE_CLASSID
392 	pde = proc_create("rt_acct", 0, net->proc_net, &rt_acct_proc_fops);
393 	if (!pde)
394 		goto err3;
395 #endif
396 	return 0;
397 
398 #ifdef CONFIG_IP_ROUTE_CLASSID
399 err3:
400 	remove_proc_entry("rt_cache", net->proc_net_stat);
401 #endif
402 err2:
403 	remove_proc_entry("rt_cache", net->proc_net);
404 err1:
405 	return -ENOMEM;
406 }
407 
408 static void __net_exit ip_rt_do_proc_exit(struct net *net)
409 {
410 	remove_proc_entry("rt_cache", net->proc_net_stat);
411 	remove_proc_entry("rt_cache", net->proc_net);
412 #ifdef CONFIG_IP_ROUTE_CLASSID
413 	remove_proc_entry("rt_acct", net->proc_net);
414 #endif
415 }
416 
417 static struct pernet_operations ip_rt_proc_ops __net_initdata =  {
418 	.init = ip_rt_do_proc_init,
419 	.exit = ip_rt_do_proc_exit,
420 };
421 
422 static int __init ip_rt_proc_init(void)
423 {
424 	return register_pernet_subsys(&ip_rt_proc_ops);
425 }
426 
427 #else
428 static inline int ip_rt_proc_init(void)
429 {
430 	return 0;
431 }
432 #endif /* CONFIG_PROC_FS */
433 
434 static inline bool rt_is_expired(const struct rtable *rth)
435 {
436 	return rth->rt_genid != rt_genid_ipv4(dev_net(rth->dst.dev));
437 }
438 
439 void rt_cache_flush(struct net *net)
440 {
441 	rt_genid_bump_ipv4(net);
442 }
443 
444 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
445 					   struct sk_buff *skb,
446 					   const void *daddr)
447 {
448 	struct net_device *dev = dst->dev;
449 	const __be32 *pkey = daddr;
450 	const struct rtable *rt;
451 	struct neighbour *n;
452 
453 	rt = (const struct rtable *) dst;
454 	if (rt->rt_gateway)
455 		pkey = (const __be32 *) &rt->rt_gateway;
456 	else if (skb)
457 		pkey = &ip_hdr(skb)->daddr;
458 
459 	n = __ipv4_neigh_lookup(dev, *(__force u32 *)pkey);
460 	if (n)
461 		return n;
462 	return neigh_create(&arp_tbl, pkey, dev);
463 }
464 
465 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr)
466 {
467 	struct net_device *dev = dst->dev;
468 	const __be32 *pkey = daddr;
469 	const struct rtable *rt;
470 
471 	rt = (const struct rtable *)dst;
472 	if (rt->rt_gateway)
473 		pkey = (const __be32 *)&rt->rt_gateway;
474 	else if (!daddr ||
475 		 (rt->rt_flags &
476 		  (RTCF_MULTICAST | RTCF_BROADCAST | RTCF_LOCAL)))
477 		return;
478 
479 	__ipv4_confirm_neigh(dev, *(__force u32 *)pkey);
480 }
481 
482 #define IP_IDENTS_SZ 2048u
483 
484 static atomic_t *ip_idents __read_mostly;
485 static u32 *ip_tstamps __read_mostly;
486 
487 /* In order to protect privacy, we add a perturbation to identifiers
488  * if one generator is seldom used. This makes hard for an attacker
489  * to infer how many packets were sent between two points in time.
490  */
491 u32 ip_idents_reserve(u32 hash, int segs)
492 {
493 	u32 *p_tstamp = ip_tstamps + hash % IP_IDENTS_SZ;
494 	atomic_t *p_id = ip_idents + hash % IP_IDENTS_SZ;
495 	u32 old = READ_ONCE(*p_tstamp);
496 	u32 now = (u32)jiffies;
497 	u32 new, delta = 0;
498 
499 	if (old != now && cmpxchg(p_tstamp, old, now) == old)
500 		delta = prandom_u32_max(now - old);
501 
502 	/* Do not use atomic_add_return() as it makes UBSAN unhappy */
503 	do {
504 		old = (u32)atomic_read(p_id);
505 		new = old + delta + segs;
506 	} while (atomic_cmpxchg(p_id, old, new) != old);
507 
508 	return new - segs;
509 }
510 EXPORT_SYMBOL(ip_idents_reserve);
511 
512 void __ip_select_ident(struct net *net, struct iphdr *iph, int segs)
513 {
514 	static u32 ip_idents_hashrnd __read_mostly;
515 	u32 hash, id;
516 
517 	net_get_random_once(&ip_idents_hashrnd, sizeof(ip_idents_hashrnd));
518 
519 	hash = jhash_3words((__force u32)iph->daddr,
520 			    (__force u32)iph->saddr,
521 			    iph->protocol ^ net_hash_mix(net),
522 			    ip_idents_hashrnd);
523 	id = ip_idents_reserve(hash, segs);
524 	iph->id = htons(id);
525 }
526 EXPORT_SYMBOL(__ip_select_ident);
527 
528 static void __build_flow_key(const struct net *net, struct flowi4 *fl4,
529 			     const struct sock *sk,
530 			     const struct iphdr *iph,
531 			     int oif, u8 tos,
532 			     u8 prot, u32 mark, int flow_flags)
533 {
534 	if (sk) {
535 		const struct inet_sock *inet = inet_sk(sk);
536 
537 		oif = sk->sk_bound_dev_if;
538 		mark = sk->sk_mark;
539 		tos = RT_CONN_FLAGS(sk);
540 		prot = inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol;
541 	}
542 	flowi4_init_output(fl4, oif, mark, tos,
543 			   RT_SCOPE_UNIVERSE, prot,
544 			   flow_flags,
545 			   iph->daddr, iph->saddr, 0, 0,
546 			   sock_net_uid(net, sk));
547 }
548 
549 static void build_skb_flow_key(struct flowi4 *fl4, const struct sk_buff *skb,
550 			       const struct sock *sk)
551 {
552 	const struct net *net = dev_net(skb->dev);
553 	const struct iphdr *iph = ip_hdr(skb);
554 	int oif = skb->dev->ifindex;
555 	u8 tos = RT_TOS(iph->tos);
556 	u8 prot = iph->protocol;
557 	u32 mark = skb->mark;
558 
559 	__build_flow_key(net, fl4, sk, iph, oif, tos, prot, mark, 0);
560 }
561 
562 static void build_sk_flow_key(struct flowi4 *fl4, const struct sock *sk)
563 {
564 	const struct inet_sock *inet = inet_sk(sk);
565 	const struct ip_options_rcu *inet_opt;
566 	__be32 daddr = inet->inet_daddr;
567 
568 	rcu_read_lock();
569 	inet_opt = rcu_dereference(inet->inet_opt);
570 	if (inet_opt && inet_opt->opt.srr)
571 		daddr = inet_opt->opt.faddr;
572 	flowi4_init_output(fl4, sk->sk_bound_dev_if, sk->sk_mark,
573 			   RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE,
574 			   inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol,
575 			   inet_sk_flowi_flags(sk),
576 			   daddr, inet->inet_saddr, 0, 0, sk->sk_uid);
577 	rcu_read_unlock();
578 }
579 
580 static void ip_rt_build_flow_key(struct flowi4 *fl4, const struct sock *sk,
581 				 const struct sk_buff *skb)
582 {
583 	if (skb)
584 		build_skb_flow_key(fl4, skb, sk);
585 	else
586 		build_sk_flow_key(fl4, sk);
587 }
588 
589 static DEFINE_SPINLOCK(fnhe_lock);
590 
591 static void fnhe_flush_routes(struct fib_nh_exception *fnhe)
592 {
593 	struct rtable *rt;
594 
595 	rt = rcu_dereference(fnhe->fnhe_rth_input);
596 	if (rt) {
597 		RCU_INIT_POINTER(fnhe->fnhe_rth_input, NULL);
598 		dst_dev_put(&rt->dst);
599 		dst_release(&rt->dst);
600 	}
601 	rt = rcu_dereference(fnhe->fnhe_rth_output);
602 	if (rt) {
603 		RCU_INIT_POINTER(fnhe->fnhe_rth_output, NULL);
604 		dst_dev_put(&rt->dst);
605 		dst_release(&rt->dst);
606 	}
607 }
608 
609 static struct fib_nh_exception *fnhe_oldest(struct fnhe_hash_bucket *hash)
610 {
611 	struct fib_nh_exception *fnhe, *oldest;
612 
613 	oldest = rcu_dereference(hash->chain);
614 	for (fnhe = rcu_dereference(oldest->fnhe_next); fnhe;
615 	     fnhe = rcu_dereference(fnhe->fnhe_next)) {
616 		if (time_before(fnhe->fnhe_stamp, oldest->fnhe_stamp))
617 			oldest = fnhe;
618 	}
619 	fnhe_flush_routes(oldest);
620 	return oldest;
621 }
622 
623 static inline u32 fnhe_hashfun(__be32 daddr)
624 {
625 	static u32 fnhe_hashrnd __read_mostly;
626 	u32 hval;
627 
628 	net_get_random_once(&fnhe_hashrnd, sizeof(fnhe_hashrnd));
629 	hval = jhash_1word((__force u32) daddr, fnhe_hashrnd);
630 	return hash_32(hval, FNHE_HASH_SHIFT);
631 }
632 
633 static void fill_route_from_fnhe(struct rtable *rt, struct fib_nh_exception *fnhe)
634 {
635 	rt->rt_pmtu = fnhe->fnhe_pmtu;
636 	rt->rt_mtu_locked = fnhe->fnhe_mtu_locked;
637 	rt->dst.expires = fnhe->fnhe_expires;
638 
639 	if (fnhe->fnhe_gw) {
640 		rt->rt_flags |= RTCF_REDIRECTED;
641 		rt->rt_gateway = fnhe->fnhe_gw;
642 		rt->rt_uses_gateway = 1;
643 	}
644 }
645 
646 static void update_or_create_fnhe(struct fib_nh *nh, __be32 daddr, __be32 gw,
647 				  u32 pmtu, bool lock, unsigned long expires)
648 {
649 	struct fnhe_hash_bucket *hash;
650 	struct fib_nh_exception *fnhe;
651 	struct rtable *rt;
652 	u32 genid, hval;
653 	unsigned int i;
654 	int depth;
655 
656 	genid = fnhe_genid(dev_net(nh->nh_dev));
657 	hval = fnhe_hashfun(daddr);
658 
659 	spin_lock_bh(&fnhe_lock);
660 
661 	hash = rcu_dereference(nh->nh_exceptions);
662 	if (!hash) {
663 		hash = kzalloc(FNHE_HASH_SIZE * sizeof(*hash), GFP_ATOMIC);
664 		if (!hash)
665 			goto out_unlock;
666 		rcu_assign_pointer(nh->nh_exceptions, hash);
667 	}
668 
669 	hash += hval;
670 
671 	depth = 0;
672 	for (fnhe = rcu_dereference(hash->chain); fnhe;
673 	     fnhe = rcu_dereference(fnhe->fnhe_next)) {
674 		if (fnhe->fnhe_daddr == daddr)
675 			break;
676 		depth++;
677 	}
678 
679 	if (fnhe) {
680 		if (fnhe->fnhe_genid != genid)
681 			fnhe->fnhe_genid = genid;
682 		if (gw)
683 			fnhe->fnhe_gw = gw;
684 		if (pmtu) {
685 			fnhe->fnhe_pmtu = pmtu;
686 			fnhe->fnhe_mtu_locked = lock;
687 		}
688 		fnhe->fnhe_expires = max(1UL, expires);
689 		/* Update all cached dsts too */
690 		rt = rcu_dereference(fnhe->fnhe_rth_input);
691 		if (rt)
692 			fill_route_from_fnhe(rt, fnhe);
693 		rt = rcu_dereference(fnhe->fnhe_rth_output);
694 		if (rt)
695 			fill_route_from_fnhe(rt, fnhe);
696 	} else {
697 		if (depth > FNHE_RECLAIM_DEPTH)
698 			fnhe = fnhe_oldest(hash);
699 		else {
700 			fnhe = kzalloc(sizeof(*fnhe), GFP_ATOMIC);
701 			if (!fnhe)
702 				goto out_unlock;
703 
704 			fnhe->fnhe_next = hash->chain;
705 			rcu_assign_pointer(hash->chain, fnhe);
706 		}
707 		fnhe->fnhe_genid = genid;
708 		fnhe->fnhe_daddr = daddr;
709 		fnhe->fnhe_gw = gw;
710 		fnhe->fnhe_pmtu = pmtu;
711 		fnhe->fnhe_mtu_locked = lock;
712 		fnhe->fnhe_expires = max(1UL, expires);
713 
714 		/* Exception created; mark the cached routes for the nexthop
715 		 * stale, so anyone caching it rechecks if this exception
716 		 * applies to them.
717 		 */
718 		rt = rcu_dereference(nh->nh_rth_input);
719 		if (rt)
720 			rt->dst.obsolete = DST_OBSOLETE_KILL;
721 
722 		for_each_possible_cpu(i) {
723 			struct rtable __rcu **prt;
724 			prt = per_cpu_ptr(nh->nh_pcpu_rth_output, i);
725 			rt = rcu_dereference(*prt);
726 			if (rt)
727 				rt->dst.obsolete = DST_OBSOLETE_KILL;
728 		}
729 	}
730 
731 	fnhe->fnhe_stamp = jiffies;
732 
733 out_unlock:
734 	spin_unlock_bh(&fnhe_lock);
735 }
736 
737 static void __ip_do_redirect(struct rtable *rt, struct sk_buff *skb, struct flowi4 *fl4,
738 			     bool kill_route)
739 {
740 	__be32 new_gw = icmp_hdr(skb)->un.gateway;
741 	__be32 old_gw = ip_hdr(skb)->saddr;
742 	struct net_device *dev = skb->dev;
743 	struct in_device *in_dev;
744 	struct fib_result res;
745 	struct neighbour *n;
746 	struct net *net;
747 
748 	switch (icmp_hdr(skb)->code & 7) {
749 	case ICMP_REDIR_NET:
750 	case ICMP_REDIR_NETTOS:
751 	case ICMP_REDIR_HOST:
752 	case ICMP_REDIR_HOSTTOS:
753 		break;
754 
755 	default:
756 		return;
757 	}
758 
759 	if (rt->rt_gateway != old_gw)
760 		return;
761 
762 	in_dev = __in_dev_get_rcu(dev);
763 	if (!in_dev)
764 		return;
765 
766 	net = dev_net(dev);
767 	if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev) ||
768 	    ipv4_is_multicast(new_gw) || ipv4_is_lbcast(new_gw) ||
769 	    ipv4_is_zeronet(new_gw))
770 		goto reject_redirect;
771 
772 	if (!IN_DEV_SHARED_MEDIA(in_dev)) {
773 		if (!inet_addr_onlink(in_dev, new_gw, old_gw))
774 			goto reject_redirect;
775 		if (IN_DEV_SEC_REDIRECTS(in_dev) && ip_fib_check_default(new_gw, dev))
776 			goto reject_redirect;
777 	} else {
778 		if (inet_addr_type(net, new_gw) != RTN_UNICAST)
779 			goto reject_redirect;
780 	}
781 
782 	n = __ipv4_neigh_lookup(rt->dst.dev, new_gw);
783 	if (!n)
784 		n = neigh_create(&arp_tbl, &new_gw, rt->dst.dev);
785 	if (!IS_ERR(n)) {
786 		if (!(n->nud_state & NUD_VALID)) {
787 			neigh_event_send(n, NULL);
788 		} else {
789 			if (fib_lookup(net, fl4, &res, 0) == 0) {
790 				struct fib_nh *nh = &FIB_RES_NH(res);
791 
792 				update_or_create_fnhe(nh, fl4->daddr, new_gw,
793 						0, false,
794 						jiffies + ip_rt_gc_timeout);
795 			}
796 			if (kill_route)
797 				rt->dst.obsolete = DST_OBSOLETE_KILL;
798 			call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, n);
799 		}
800 		neigh_release(n);
801 	}
802 	return;
803 
804 reject_redirect:
805 #ifdef CONFIG_IP_ROUTE_VERBOSE
806 	if (IN_DEV_LOG_MARTIANS(in_dev)) {
807 		const struct iphdr *iph = (const struct iphdr *) skb->data;
808 		__be32 daddr = iph->daddr;
809 		__be32 saddr = iph->saddr;
810 
811 		net_info_ratelimited("Redirect from %pI4 on %s about %pI4 ignored\n"
812 				     "  Advised path = %pI4 -> %pI4\n",
813 				     &old_gw, dev->name, &new_gw,
814 				     &saddr, &daddr);
815 	}
816 #endif
817 	;
818 }
819 
820 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb)
821 {
822 	struct rtable *rt;
823 	struct flowi4 fl4;
824 	const struct iphdr *iph = (const struct iphdr *) skb->data;
825 	struct net *net = dev_net(skb->dev);
826 	int oif = skb->dev->ifindex;
827 	u8 tos = RT_TOS(iph->tos);
828 	u8 prot = iph->protocol;
829 	u32 mark = skb->mark;
830 
831 	rt = (struct rtable *) dst;
832 
833 	__build_flow_key(net, &fl4, sk, iph, oif, tos, prot, mark, 0);
834 	__ip_do_redirect(rt, skb, &fl4, true);
835 }
836 
837 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst)
838 {
839 	struct rtable *rt = (struct rtable *)dst;
840 	struct dst_entry *ret = dst;
841 
842 	if (rt) {
843 		if (dst->obsolete > 0) {
844 			ip_rt_put(rt);
845 			ret = NULL;
846 		} else if ((rt->rt_flags & RTCF_REDIRECTED) ||
847 			   rt->dst.expires) {
848 			ip_rt_put(rt);
849 			ret = NULL;
850 		}
851 	}
852 	return ret;
853 }
854 
855 /*
856  * Algorithm:
857  *	1. The first ip_rt_redirect_number redirects are sent
858  *	   with exponential backoff, then we stop sending them at all,
859  *	   assuming that the host ignores our redirects.
860  *	2. If we did not see packets requiring redirects
861  *	   during ip_rt_redirect_silence, we assume that the host
862  *	   forgot redirected route and start to send redirects again.
863  *
864  * This algorithm is much cheaper and more intelligent than dumb load limiting
865  * in icmp.c.
866  *
867  * NOTE. Do not forget to inhibit load limiting for redirects (redundant)
868  * and "frag. need" (breaks PMTU discovery) in icmp.c.
869  */
870 
871 void ip_rt_send_redirect(struct sk_buff *skb)
872 {
873 	struct rtable *rt = skb_rtable(skb);
874 	struct in_device *in_dev;
875 	struct inet_peer *peer;
876 	struct net *net;
877 	int log_martians;
878 	int vif;
879 
880 	rcu_read_lock();
881 	in_dev = __in_dev_get_rcu(rt->dst.dev);
882 	if (!in_dev || !IN_DEV_TX_REDIRECTS(in_dev)) {
883 		rcu_read_unlock();
884 		return;
885 	}
886 	log_martians = IN_DEV_LOG_MARTIANS(in_dev);
887 	vif = l3mdev_master_ifindex_rcu(rt->dst.dev);
888 	rcu_read_unlock();
889 
890 	net = dev_net(rt->dst.dev);
891 	peer = inet_getpeer_v4(net->ipv4.peers, ip_hdr(skb)->saddr, vif, 1);
892 	if (!peer) {
893 		icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST,
894 			  rt_nexthop(rt, ip_hdr(skb)->daddr));
895 		return;
896 	}
897 
898 	/* No redirected packets during ip_rt_redirect_silence;
899 	 * reset the algorithm.
900 	 */
901 	if (time_after(jiffies, peer->rate_last + ip_rt_redirect_silence))
902 		peer->rate_tokens = 0;
903 
904 	/* Too many ignored redirects; do not send anything
905 	 * set dst.rate_last to the last seen redirected packet.
906 	 */
907 	if (peer->rate_tokens >= ip_rt_redirect_number) {
908 		peer->rate_last = jiffies;
909 		goto out_put_peer;
910 	}
911 
912 	/* Check for load limit; set rate_last to the latest sent
913 	 * redirect.
914 	 */
915 	if (peer->rate_tokens == 0 ||
916 	    time_after(jiffies,
917 		       (peer->rate_last +
918 			(ip_rt_redirect_load << peer->rate_tokens)))) {
919 		__be32 gw = rt_nexthop(rt, ip_hdr(skb)->daddr);
920 
921 		icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw);
922 		peer->rate_last = jiffies;
923 		++peer->rate_tokens;
924 #ifdef CONFIG_IP_ROUTE_VERBOSE
925 		if (log_martians &&
926 		    peer->rate_tokens == ip_rt_redirect_number)
927 			net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n",
928 					     &ip_hdr(skb)->saddr, inet_iif(skb),
929 					     &ip_hdr(skb)->daddr, &gw);
930 #endif
931 	}
932 out_put_peer:
933 	inet_putpeer(peer);
934 }
935 
936 static int ip_error(struct sk_buff *skb)
937 {
938 	struct rtable *rt = skb_rtable(skb);
939 	struct net_device *dev = skb->dev;
940 	struct in_device *in_dev;
941 	struct inet_peer *peer;
942 	unsigned long now;
943 	struct net *net;
944 	bool send;
945 	int code;
946 
947 	if (netif_is_l3_master(skb->dev)) {
948 		dev = __dev_get_by_index(dev_net(skb->dev), IPCB(skb)->iif);
949 		if (!dev)
950 			goto out;
951 	}
952 
953 	in_dev = __in_dev_get_rcu(dev);
954 
955 	/* IP on this device is disabled. */
956 	if (!in_dev)
957 		goto out;
958 
959 	net = dev_net(rt->dst.dev);
960 	if (!IN_DEV_FORWARD(in_dev)) {
961 		switch (rt->dst.error) {
962 		case EHOSTUNREACH:
963 			__IP_INC_STATS(net, IPSTATS_MIB_INADDRERRORS);
964 			break;
965 
966 		case ENETUNREACH:
967 			__IP_INC_STATS(net, IPSTATS_MIB_INNOROUTES);
968 			break;
969 		}
970 		goto out;
971 	}
972 
973 	switch (rt->dst.error) {
974 	case EINVAL:
975 	default:
976 		goto out;
977 	case EHOSTUNREACH:
978 		code = ICMP_HOST_UNREACH;
979 		break;
980 	case ENETUNREACH:
981 		code = ICMP_NET_UNREACH;
982 		__IP_INC_STATS(net, IPSTATS_MIB_INNOROUTES);
983 		break;
984 	case EACCES:
985 		code = ICMP_PKT_FILTERED;
986 		break;
987 	}
988 
989 	peer = inet_getpeer_v4(net->ipv4.peers, ip_hdr(skb)->saddr,
990 			       l3mdev_master_ifindex(skb->dev), 1);
991 
992 	send = true;
993 	if (peer) {
994 		now = jiffies;
995 		peer->rate_tokens += now - peer->rate_last;
996 		if (peer->rate_tokens > ip_rt_error_burst)
997 			peer->rate_tokens = ip_rt_error_burst;
998 		peer->rate_last = now;
999 		if (peer->rate_tokens >= ip_rt_error_cost)
1000 			peer->rate_tokens -= ip_rt_error_cost;
1001 		else
1002 			send = false;
1003 		inet_putpeer(peer);
1004 	}
1005 	if (send)
1006 		icmp_send(skb, ICMP_DEST_UNREACH, code, 0);
1007 
1008 out:	kfree_skb(skb);
1009 	return 0;
1010 }
1011 
1012 static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu)
1013 {
1014 	struct dst_entry *dst = &rt->dst;
1015 	struct fib_result res;
1016 	bool lock = false;
1017 
1018 	if (ip_mtu_locked(dst))
1019 		return;
1020 
1021 	if (ipv4_mtu(dst) < mtu)
1022 		return;
1023 
1024 	if (mtu < ip_rt_min_pmtu) {
1025 		lock = true;
1026 		mtu = ip_rt_min_pmtu;
1027 	}
1028 
1029 	if (rt->rt_pmtu == mtu &&
1030 	    time_before(jiffies, dst->expires - ip_rt_mtu_expires / 2))
1031 		return;
1032 
1033 	rcu_read_lock();
1034 	if (fib_lookup(dev_net(dst->dev), fl4, &res, 0) == 0) {
1035 		struct fib_nh *nh = &FIB_RES_NH(res);
1036 
1037 		update_or_create_fnhe(nh, fl4->daddr, 0, mtu, lock,
1038 				      jiffies + ip_rt_mtu_expires);
1039 	}
1040 	rcu_read_unlock();
1041 }
1042 
1043 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
1044 			      struct sk_buff *skb, u32 mtu)
1045 {
1046 	struct rtable *rt = (struct rtable *) dst;
1047 	struct flowi4 fl4;
1048 
1049 	ip_rt_build_flow_key(&fl4, sk, skb);
1050 	__ip_rt_update_pmtu(rt, &fl4, mtu);
1051 }
1052 
1053 void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
1054 		      int oif, u32 mark, u8 protocol, int flow_flags)
1055 {
1056 	const struct iphdr *iph = (const struct iphdr *) skb->data;
1057 	struct flowi4 fl4;
1058 	struct rtable *rt;
1059 
1060 	if (!mark)
1061 		mark = IP4_REPLY_MARK(net, skb->mark);
1062 
1063 	__build_flow_key(net, &fl4, NULL, iph, oif,
1064 			 RT_TOS(iph->tos), protocol, mark, flow_flags);
1065 	rt = __ip_route_output_key(net, &fl4);
1066 	if (!IS_ERR(rt)) {
1067 		__ip_rt_update_pmtu(rt, &fl4, mtu);
1068 		ip_rt_put(rt);
1069 	}
1070 }
1071 EXPORT_SYMBOL_GPL(ipv4_update_pmtu);
1072 
1073 static void __ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1074 {
1075 	const struct iphdr *iph = (const struct iphdr *) skb->data;
1076 	struct flowi4 fl4;
1077 	struct rtable *rt;
1078 
1079 	__build_flow_key(sock_net(sk), &fl4, sk, iph, 0, 0, 0, 0, 0);
1080 
1081 	if (!fl4.flowi4_mark)
1082 		fl4.flowi4_mark = IP4_REPLY_MARK(sock_net(sk), skb->mark);
1083 
1084 	rt = __ip_route_output_key(sock_net(sk), &fl4);
1085 	if (!IS_ERR(rt)) {
1086 		__ip_rt_update_pmtu(rt, &fl4, mtu);
1087 		ip_rt_put(rt);
1088 	}
1089 }
1090 
1091 void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1092 {
1093 	const struct iphdr *iph = (const struct iphdr *) skb->data;
1094 	struct flowi4 fl4;
1095 	struct rtable *rt;
1096 	struct dst_entry *odst = NULL;
1097 	bool new = false;
1098 	struct net *net = sock_net(sk);
1099 
1100 	bh_lock_sock(sk);
1101 
1102 	if (!ip_sk_accept_pmtu(sk))
1103 		goto out;
1104 
1105 	odst = sk_dst_get(sk);
1106 
1107 	if (sock_owned_by_user(sk) || !odst) {
1108 		__ipv4_sk_update_pmtu(skb, sk, mtu);
1109 		goto out;
1110 	}
1111 
1112 	__build_flow_key(net, &fl4, sk, iph, 0, 0, 0, 0, 0);
1113 
1114 	rt = (struct rtable *)odst;
1115 	if (odst->obsolete && !odst->ops->check(odst, 0)) {
1116 		rt = ip_route_output_flow(sock_net(sk), &fl4, sk);
1117 		if (IS_ERR(rt))
1118 			goto out;
1119 
1120 		new = true;
1121 	}
1122 
1123 	__ip_rt_update_pmtu((struct rtable *) xfrm_dst_path(&rt->dst), &fl4, mtu);
1124 
1125 	if (!dst_check(&rt->dst, 0)) {
1126 		if (new)
1127 			dst_release(&rt->dst);
1128 
1129 		rt = ip_route_output_flow(sock_net(sk), &fl4, sk);
1130 		if (IS_ERR(rt))
1131 			goto out;
1132 
1133 		new = true;
1134 	}
1135 
1136 	if (new)
1137 		sk_dst_set(sk, &rt->dst);
1138 
1139 out:
1140 	bh_unlock_sock(sk);
1141 	dst_release(odst);
1142 }
1143 EXPORT_SYMBOL_GPL(ipv4_sk_update_pmtu);
1144 
1145 void ipv4_redirect(struct sk_buff *skb, struct net *net,
1146 		   int oif, u32 mark, u8 protocol, int flow_flags)
1147 {
1148 	const struct iphdr *iph = (const struct iphdr *) skb->data;
1149 	struct flowi4 fl4;
1150 	struct rtable *rt;
1151 
1152 	__build_flow_key(net, &fl4, NULL, iph, oif,
1153 			 RT_TOS(iph->tos), protocol, mark, flow_flags);
1154 	rt = __ip_route_output_key(net, &fl4);
1155 	if (!IS_ERR(rt)) {
1156 		__ip_do_redirect(rt, skb, &fl4, false);
1157 		ip_rt_put(rt);
1158 	}
1159 }
1160 EXPORT_SYMBOL_GPL(ipv4_redirect);
1161 
1162 void ipv4_sk_redirect(struct sk_buff *skb, struct sock *sk)
1163 {
1164 	const struct iphdr *iph = (const struct iphdr *) skb->data;
1165 	struct flowi4 fl4;
1166 	struct rtable *rt;
1167 	struct net *net = sock_net(sk);
1168 
1169 	__build_flow_key(net, &fl4, sk, iph, 0, 0, 0, 0, 0);
1170 	rt = __ip_route_output_key(net, &fl4);
1171 	if (!IS_ERR(rt)) {
1172 		__ip_do_redirect(rt, skb, &fl4, false);
1173 		ip_rt_put(rt);
1174 	}
1175 }
1176 EXPORT_SYMBOL_GPL(ipv4_sk_redirect);
1177 
1178 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie)
1179 {
1180 	struct rtable *rt = (struct rtable *) dst;
1181 
1182 	/* All IPV4 dsts are created with ->obsolete set to the value
1183 	 * DST_OBSOLETE_FORCE_CHK which forces validation calls down
1184 	 * into this function always.
1185 	 *
1186 	 * When a PMTU/redirect information update invalidates a route,
1187 	 * this is indicated by setting obsolete to DST_OBSOLETE_KILL or
1188 	 * DST_OBSOLETE_DEAD by dst_free().
1189 	 */
1190 	if (dst->obsolete != DST_OBSOLETE_FORCE_CHK || rt_is_expired(rt))
1191 		return NULL;
1192 	return dst;
1193 }
1194 
1195 static void ipv4_link_failure(struct sk_buff *skb)
1196 {
1197 	struct rtable *rt;
1198 
1199 	icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
1200 
1201 	rt = skb_rtable(skb);
1202 	if (rt)
1203 		dst_set_expires(&rt->dst, 0);
1204 }
1205 
1206 static int ip_rt_bug(struct net *net, struct sock *sk, struct sk_buff *skb)
1207 {
1208 	pr_debug("%s: %pI4 -> %pI4, %s\n",
1209 		 __func__, &ip_hdr(skb)->saddr, &ip_hdr(skb)->daddr,
1210 		 skb->dev ? skb->dev->name : "?");
1211 	kfree_skb(skb);
1212 	WARN_ON(1);
1213 	return 0;
1214 }
1215 
1216 /*
1217    We do not cache source address of outgoing interface,
1218    because it is used only by IP RR, TS and SRR options,
1219    so that it out of fast path.
1220 
1221    BTW remember: "addr" is allowed to be not aligned
1222    in IP options!
1223  */
1224 
1225 void ip_rt_get_source(u8 *addr, struct sk_buff *skb, struct rtable *rt)
1226 {
1227 	__be32 src;
1228 
1229 	if (rt_is_output_route(rt))
1230 		src = ip_hdr(skb)->saddr;
1231 	else {
1232 		struct fib_result res;
1233 		struct flowi4 fl4;
1234 		struct iphdr *iph;
1235 
1236 		iph = ip_hdr(skb);
1237 
1238 		memset(&fl4, 0, sizeof(fl4));
1239 		fl4.daddr = iph->daddr;
1240 		fl4.saddr = iph->saddr;
1241 		fl4.flowi4_tos = RT_TOS(iph->tos);
1242 		fl4.flowi4_oif = rt->dst.dev->ifindex;
1243 		fl4.flowi4_iif = skb->dev->ifindex;
1244 		fl4.flowi4_mark = skb->mark;
1245 
1246 		rcu_read_lock();
1247 		if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0)
1248 			src = FIB_RES_PREFSRC(dev_net(rt->dst.dev), res);
1249 		else
1250 			src = inet_select_addr(rt->dst.dev,
1251 					       rt_nexthop(rt, iph->daddr),
1252 					       RT_SCOPE_UNIVERSE);
1253 		rcu_read_unlock();
1254 	}
1255 	memcpy(addr, &src, 4);
1256 }
1257 
1258 #ifdef CONFIG_IP_ROUTE_CLASSID
1259 static void set_class_tag(struct rtable *rt, u32 tag)
1260 {
1261 	if (!(rt->dst.tclassid & 0xFFFF))
1262 		rt->dst.tclassid |= tag & 0xFFFF;
1263 	if (!(rt->dst.tclassid & 0xFFFF0000))
1264 		rt->dst.tclassid |= tag & 0xFFFF0000;
1265 }
1266 #endif
1267 
1268 static unsigned int ipv4_default_advmss(const struct dst_entry *dst)
1269 {
1270 	unsigned int header_size = sizeof(struct tcphdr) + sizeof(struct iphdr);
1271 	unsigned int advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size,
1272 				    ip_rt_min_advmss);
1273 
1274 	return min(advmss, IPV4_MAX_PMTU - header_size);
1275 }
1276 
1277 static unsigned int ipv4_mtu(const struct dst_entry *dst)
1278 {
1279 	const struct rtable *rt = (const struct rtable *) dst;
1280 	unsigned int mtu = rt->rt_pmtu;
1281 
1282 	if (!mtu || time_after_eq(jiffies, rt->dst.expires))
1283 		mtu = dst_metric_raw(dst, RTAX_MTU);
1284 
1285 	if (mtu)
1286 		return mtu;
1287 
1288 	mtu = READ_ONCE(dst->dev->mtu);
1289 
1290 	if (unlikely(ip_mtu_locked(dst))) {
1291 		if (rt->rt_uses_gateway && mtu > 576)
1292 			mtu = 576;
1293 	}
1294 
1295 	mtu = min_t(unsigned int, mtu, IP_MAX_MTU);
1296 
1297 	return mtu - lwtunnel_headroom(dst->lwtstate, mtu);
1298 }
1299 
1300 static void ip_del_fnhe(struct fib_nh *nh, __be32 daddr)
1301 {
1302 	struct fnhe_hash_bucket *hash;
1303 	struct fib_nh_exception *fnhe, __rcu **fnhe_p;
1304 	u32 hval = fnhe_hashfun(daddr);
1305 
1306 	spin_lock_bh(&fnhe_lock);
1307 
1308 	hash = rcu_dereference_protected(nh->nh_exceptions,
1309 					 lockdep_is_held(&fnhe_lock));
1310 	hash += hval;
1311 
1312 	fnhe_p = &hash->chain;
1313 	fnhe = rcu_dereference_protected(*fnhe_p, lockdep_is_held(&fnhe_lock));
1314 	while (fnhe) {
1315 		if (fnhe->fnhe_daddr == daddr) {
1316 			rcu_assign_pointer(*fnhe_p, rcu_dereference_protected(
1317 				fnhe->fnhe_next, lockdep_is_held(&fnhe_lock)));
1318 			fnhe_flush_routes(fnhe);
1319 			kfree_rcu(fnhe, rcu);
1320 			break;
1321 		}
1322 		fnhe_p = &fnhe->fnhe_next;
1323 		fnhe = rcu_dereference_protected(fnhe->fnhe_next,
1324 						 lockdep_is_held(&fnhe_lock));
1325 	}
1326 
1327 	spin_unlock_bh(&fnhe_lock);
1328 }
1329 
1330 static struct fib_nh_exception *find_exception(struct fib_nh *nh, __be32 daddr)
1331 {
1332 	struct fnhe_hash_bucket *hash = rcu_dereference(nh->nh_exceptions);
1333 	struct fib_nh_exception *fnhe;
1334 	u32 hval;
1335 
1336 	if (!hash)
1337 		return NULL;
1338 
1339 	hval = fnhe_hashfun(daddr);
1340 
1341 	for (fnhe = rcu_dereference(hash[hval].chain); fnhe;
1342 	     fnhe = rcu_dereference(fnhe->fnhe_next)) {
1343 		if (fnhe->fnhe_daddr == daddr) {
1344 			if (fnhe->fnhe_expires &&
1345 			    time_after(jiffies, fnhe->fnhe_expires)) {
1346 				ip_del_fnhe(nh, daddr);
1347 				break;
1348 			}
1349 			return fnhe;
1350 		}
1351 	}
1352 	return NULL;
1353 }
1354 
1355 /* MTU selection:
1356  * 1. mtu on route is locked - use it
1357  * 2. mtu from nexthop exception
1358  * 3. mtu from egress device
1359  */
1360 
1361 u32 ip_mtu_from_fib_result(struct fib_result *res, __be32 daddr)
1362 {
1363 	struct fib_info *fi = res->fi;
1364 	struct fib_nh *nh = &fi->fib_nh[res->nh_sel];
1365 	struct net_device *dev = nh->nh_dev;
1366 	u32 mtu = 0;
1367 
1368 	if (dev_net(dev)->ipv4.sysctl_ip_fwd_use_pmtu ||
1369 	    fi->fib_metrics->metrics[RTAX_LOCK - 1] & (1 << RTAX_MTU))
1370 		mtu = fi->fib_mtu;
1371 
1372 	if (likely(!mtu)) {
1373 		struct fib_nh_exception *fnhe;
1374 
1375 		fnhe = find_exception(nh, daddr);
1376 		if (fnhe && !time_after_eq(jiffies, fnhe->fnhe_expires))
1377 			mtu = fnhe->fnhe_pmtu;
1378 	}
1379 
1380 	if (likely(!mtu))
1381 		mtu = min(READ_ONCE(dev->mtu), IP_MAX_MTU);
1382 
1383 	return mtu - lwtunnel_headroom(nh->nh_lwtstate, mtu);
1384 }
1385 
1386 static bool rt_bind_exception(struct rtable *rt, struct fib_nh_exception *fnhe,
1387 			      __be32 daddr, const bool do_cache)
1388 {
1389 	bool ret = false;
1390 
1391 	spin_lock_bh(&fnhe_lock);
1392 
1393 	if (daddr == fnhe->fnhe_daddr) {
1394 		struct rtable __rcu **porig;
1395 		struct rtable *orig;
1396 		int genid = fnhe_genid(dev_net(rt->dst.dev));
1397 
1398 		if (rt_is_input_route(rt))
1399 			porig = &fnhe->fnhe_rth_input;
1400 		else
1401 			porig = &fnhe->fnhe_rth_output;
1402 		orig = rcu_dereference(*porig);
1403 
1404 		if (fnhe->fnhe_genid != genid) {
1405 			fnhe->fnhe_genid = genid;
1406 			fnhe->fnhe_gw = 0;
1407 			fnhe->fnhe_pmtu = 0;
1408 			fnhe->fnhe_expires = 0;
1409 			fnhe->fnhe_mtu_locked = false;
1410 			fnhe_flush_routes(fnhe);
1411 			orig = NULL;
1412 		}
1413 		fill_route_from_fnhe(rt, fnhe);
1414 		if (!rt->rt_gateway)
1415 			rt->rt_gateway = daddr;
1416 
1417 		if (do_cache) {
1418 			dst_hold(&rt->dst);
1419 			rcu_assign_pointer(*porig, rt);
1420 			if (orig) {
1421 				dst_dev_put(&orig->dst);
1422 				dst_release(&orig->dst);
1423 			}
1424 			ret = true;
1425 		}
1426 
1427 		fnhe->fnhe_stamp = jiffies;
1428 	}
1429 	spin_unlock_bh(&fnhe_lock);
1430 
1431 	return ret;
1432 }
1433 
1434 static bool rt_cache_route(struct fib_nh *nh, struct rtable *rt)
1435 {
1436 	struct rtable *orig, *prev, **p;
1437 	bool ret = true;
1438 
1439 	if (rt_is_input_route(rt)) {
1440 		p = (struct rtable **)&nh->nh_rth_input;
1441 	} else {
1442 		p = (struct rtable **)raw_cpu_ptr(nh->nh_pcpu_rth_output);
1443 	}
1444 	orig = *p;
1445 
1446 	/* hold dst before doing cmpxchg() to avoid race condition
1447 	 * on this dst
1448 	 */
1449 	dst_hold(&rt->dst);
1450 	prev = cmpxchg(p, orig, rt);
1451 	if (prev == orig) {
1452 		if (orig) {
1453 			dst_dev_put(&orig->dst);
1454 			dst_release(&orig->dst);
1455 		}
1456 	} else {
1457 		dst_release(&rt->dst);
1458 		ret = false;
1459 	}
1460 
1461 	return ret;
1462 }
1463 
1464 struct uncached_list {
1465 	spinlock_t		lock;
1466 	struct list_head	head;
1467 };
1468 
1469 static DEFINE_PER_CPU_ALIGNED(struct uncached_list, rt_uncached_list);
1470 
1471 void rt_add_uncached_list(struct rtable *rt)
1472 {
1473 	struct uncached_list *ul = raw_cpu_ptr(&rt_uncached_list);
1474 
1475 	rt->rt_uncached_list = ul;
1476 
1477 	spin_lock_bh(&ul->lock);
1478 	list_add_tail(&rt->rt_uncached, &ul->head);
1479 	spin_unlock_bh(&ul->lock);
1480 }
1481 
1482 void rt_del_uncached_list(struct rtable *rt)
1483 {
1484 	if (!list_empty(&rt->rt_uncached)) {
1485 		struct uncached_list *ul = rt->rt_uncached_list;
1486 
1487 		spin_lock_bh(&ul->lock);
1488 		list_del(&rt->rt_uncached);
1489 		spin_unlock_bh(&ul->lock);
1490 	}
1491 }
1492 
1493 static void ipv4_dst_destroy(struct dst_entry *dst)
1494 {
1495 	struct dst_metrics *p = (struct dst_metrics *)DST_METRICS_PTR(dst);
1496 	struct rtable *rt = (struct rtable *)dst;
1497 
1498 	if (p != &dst_default_metrics && refcount_dec_and_test(&p->refcnt))
1499 		kfree(p);
1500 
1501 	rt_del_uncached_list(rt);
1502 }
1503 
1504 void rt_flush_dev(struct net_device *dev)
1505 {
1506 	struct net *net = dev_net(dev);
1507 	struct rtable *rt;
1508 	int cpu;
1509 
1510 	for_each_possible_cpu(cpu) {
1511 		struct uncached_list *ul = &per_cpu(rt_uncached_list, cpu);
1512 
1513 		spin_lock_bh(&ul->lock);
1514 		list_for_each_entry(rt, &ul->head, rt_uncached) {
1515 			if (rt->dst.dev != dev)
1516 				continue;
1517 			rt->dst.dev = net->loopback_dev;
1518 			dev_hold(rt->dst.dev);
1519 			dev_put(dev);
1520 		}
1521 		spin_unlock_bh(&ul->lock);
1522 	}
1523 }
1524 
1525 static bool rt_cache_valid(const struct rtable *rt)
1526 {
1527 	return	rt &&
1528 		rt->dst.obsolete == DST_OBSOLETE_FORCE_CHK &&
1529 		!rt_is_expired(rt);
1530 }
1531 
1532 static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
1533 			   const struct fib_result *res,
1534 			   struct fib_nh_exception *fnhe,
1535 			   struct fib_info *fi, u16 type, u32 itag,
1536 			   const bool do_cache)
1537 {
1538 	bool cached = false;
1539 
1540 	if (fi) {
1541 		struct fib_nh *nh = &FIB_RES_NH(*res);
1542 
1543 		if (nh->nh_gw && nh->nh_scope == RT_SCOPE_LINK) {
1544 			rt->rt_gateway = nh->nh_gw;
1545 			rt->rt_uses_gateway = 1;
1546 		}
1547 		dst_init_metrics(&rt->dst, fi->fib_metrics->metrics, true);
1548 		if (fi->fib_metrics != &dst_default_metrics) {
1549 			rt->dst._metrics |= DST_METRICS_REFCOUNTED;
1550 			refcount_inc(&fi->fib_metrics->refcnt);
1551 		}
1552 #ifdef CONFIG_IP_ROUTE_CLASSID
1553 		rt->dst.tclassid = nh->nh_tclassid;
1554 #endif
1555 		rt->dst.lwtstate = lwtstate_get(nh->nh_lwtstate);
1556 		if (unlikely(fnhe))
1557 			cached = rt_bind_exception(rt, fnhe, daddr, do_cache);
1558 		else if (do_cache)
1559 			cached = rt_cache_route(nh, rt);
1560 		if (unlikely(!cached)) {
1561 			/* Routes we intend to cache in nexthop exception or
1562 			 * FIB nexthop have the DST_NOCACHE bit clear.
1563 			 * However, if we are unsuccessful at storing this
1564 			 * route into the cache we really need to set it.
1565 			 */
1566 			if (!rt->rt_gateway)
1567 				rt->rt_gateway = daddr;
1568 			rt_add_uncached_list(rt);
1569 		}
1570 	} else
1571 		rt_add_uncached_list(rt);
1572 
1573 #ifdef CONFIG_IP_ROUTE_CLASSID
1574 #ifdef CONFIG_IP_MULTIPLE_TABLES
1575 	set_class_tag(rt, res->tclassid);
1576 #endif
1577 	set_class_tag(rt, itag);
1578 #endif
1579 }
1580 
1581 struct rtable *rt_dst_alloc(struct net_device *dev,
1582 			    unsigned int flags, u16 type,
1583 			    bool nopolicy, bool noxfrm, bool will_cache)
1584 {
1585 	struct rtable *rt;
1586 
1587 	rt = dst_alloc(&ipv4_dst_ops, dev, 1, DST_OBSOLETE_FORCE_CHK,
1588 		       (will_cache ? 0 : DST_HOST) |
1589 		       (nopolicy ? DST_NOPOLICY : 0) |
1590 		       (noxfrm ? DST_NOXFRM : 0));
1591 
1592 	if (rt) {
1593 		rt->rt_genid = rt_genid_ipv4(dev_net(dev));
1594 		rt->rt_flags = flags;
1595 		rt->rt_type = type;
1596 		rt->rt_is_input = 0;
1597 		rt->rt_iif = 0;
1598 		rt->rt_pmtu = 0;
1599 		rt->rt_mtu_locked = 0;
1600 		rt->rt_gateway = 0;
1601 		rt->rt_uses_gateway = 0;
1602 		INIT_LIST_HEAD(&rt->rt_uncached);
1603 
1604 		rt->dst.output = ip_output;
1605 		if (flags & RTCF_LOCAL)
1606 			rt->dst.input = ip_local_deliver;
1607 	}
1608 
1609 	return rt;
1610 }
1611 EXPORT_SYMBOL(rt_dst_alloc);
1612 
1613 /* called in rcu_read_lock() section */
1614 int ip_mc_validate_source(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1615 			  u8 tos, struct net_device *dev,
1616 			  struct in_device *in_dev, u32 *itag)
1617 {
1618 	int err;
1619 
1620 	/* Primary sanity checks. */
1621 	if (!in_dev)
1622 		return -EINVAL;
1623 
1624 	if (ipv4_is_multicast(saddr) || ipv4_is_lbcast(saddr) ||
1625 	    skb->protocol != htons(ETH_P_IP))
1626 		return -EINVAL;
1627 
1628 	if (ipv4_is_loopback(saddr) && !IN_DEV_ROUTE_LOCALNET(in_dev))
1629 		return -EINVAL;
1630 
1631 	if (ipv4_is_zeronet(saddr)) {
1632 		if (!ipv4_is_local_multicast(daddr))
1633 			return -EINVAL;
1634 	} else {
1635 		err = fib_validate_source(skb, saddr, 0, tos, 0, dev,
1636 					  in_dev, itag);
1637 		if (err < 0)
1638 			return err;
1639 	}
1640 	return 0;
1641 }
1642 
1643 /* called in rcu_read_lock() section */
1644 static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1645 			     u8 tos, struct net_device *dev, int our)
1646 {
1647 	struct in_device *in_dev = __in_dev_get_rcu(dev);
1648 	unsigned int flags = RTCF_MULTICAST;
1649 	struct rtable *rth;
1650 	u32 itag = 0;
1651 	int err;
1652 
1653 	err = ip_mc_validate_source(skb, daddr, saddr, tos, dev, in_dev, &itag);
1654 	if (err)
1655 		return err;
1656 
1657 	if (our)
1658 		flags |= RTCF_LOCAL;
1659 
1660 	rth = rt_dst_alloc(dev_net(dev)->loopback_dev, flags, RTN_MULTICAST,
1661 			   IN_DEV_CONF_GET(in_dev, NOPOLICY), false, false);
1662 	if (!rth)
1663 		return -ENOBUFS;
1664 
1665 #ifdef CONFIG_IP_ROUTE_CLASSID
1666 	rth->dst.tclassid = itag;
1667 #endif
1668 	rth->dst.output = ip_rt_bug;
1669 	rth->rt_is_input= 1;
1670 
1671 #ifdef CONFIG_IP_MROUTE
1672 	if (!ipv4_is_local_multicast(daddr) && IN_DEV_MFORWARD(in_dev))
1673 		rth->dst.input = ip_mr_input;
1674 #endif
1675 	RT_CACHE_STAT_INC(in_slow_mc);
1676 
1677 	skb_dst_set(skb, &rth->dst);
1678 	return 0;
1679 }
1680 
1681 
1682 static void ip_handle_martian_source(struct net_device *dev,
1683 				     struct in_device *in_dev,
1684 				     struct sk_buff *skb,
1685 				     __be32 daddr,
1686 				     __be32 saddr)
1687 {
1688 	RT_CACHE_STAT_INC(in_martian_src);
1689 #ifdef CONFIG_IP_ROUTE_VERBOSE
1690 	if (IN_DEV_LOG_MARTIANS(in_dev) && net_ratelimit()) {
1691 		/*
1692 		 *	RFC1812 recommendation, if source is martian,
1693 		 *	the only hint is MAC header.
1694 		 */
1695 		pr_warn("martian source %pI4 from %pI4, on dev %s\n",
1696 			&daddr, &saddr, dev->name);
1697 		if (dev->hard_header_len && skb_mac_header_was_set(skb)) {
1698 			print_hex_dump(KERN_WARNING, "ll header: ",
1699 				       DUMP_PREFIX_OFFSET, 16, 1,
1700 				       skb_mac_header(skb),
1701 				       dev->hard_header_len, true);
1702 		}
1703 	}
1704 #endif
1705 }
1706 
1707 /* called in rcu_read_lock() section */
1708 static int __mkroute_input(struct sk_buff *skb,
1709 			   const struct fib_result *res,
1710 			   struct in_device *in_dev,
1711 			   __be32 daddr, __be32 saddr, u32 tos)
1712 {
1713 	struct fib_nh_exception *fnhe;
1714 	struct rtable *rth;
1715 	int err;
1716 	struct in_device *out_dev;
1717 	bool do_cache;
1718 	u32 itag = 0;
1719 
1720 	/* get a working reference to the output device */
1721 	out_dev = __in_dev_get_rcu(FIB_RES_DEV(*res));
1722 	if (!out_dev) {
1723 		net_crit_ratelimited("Bug in ip_route_input_slow(). Please report.\n");
1724 		return -EINVAL;
1725 	}
1726 
1727 	err = fib_validate_source(skb, saddr, daddr, tos, FIB_RES_OIF(*res),
1728 				  in_dev->dev, in_dev, &itag);
1729 	if (err < 0) {
1730 		ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr,
1731 					 saddr);
1732 
1733 		goto cleanup;
1734 	}
1735 
1736 	do_cache = res->fi && !itag;
1737 	if (out_dev == in_dev && err && IN_DEV_TX_REDIRECTS(out_dev) &&
1738 	    skb->protocol == htons(ETH_P_IP) &&
1739 	    (IN_DEV_SHARED_MEDIA(out_dev) ||
1740 	     inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res))))
1741 		IPCB(skb)->flags |= IPSKB_DOREDIRECT;
1742 
1743 	if (skb->protocol != htons(ETH_P_IP)) {
1744 		/* Not IP (i.e. ARP). Do not create route, if it is
1745 		 * invalid for proxy arp. DNAT routes are always valid.
1746 		 *
1747 		 * Proxy arp feature have been extended to allow, ARP
1748 		 * replies back to the same interface, to support
1749 		 * Private VLAN switch technologies. See arp.c.
1750 		 */
1751 		if (out_dev == in_dev &&
1752 		    IN_DEV_PROXY_ARP_PVLAN(in_dev) == 0) {
1753 			err = -EINVAL;
1754 			goto cleanup;
1755 		}
1756 	}
1757 
1758 	fnhe = find_exception(&FIB_RES_NH(*res), daddr);
1759 	if (do_cache) {
1760 		if (fnhe)
1761 			rth = rcu_dereference(fnhe->fnhe_rth_input);
1762 		else
1763 			rth = rcu_dereference(FIB_RES_NH(*res).nh_rth_input);
1764 		if (rt_cache_valid(rth)) {
1765 			skb_dst_set_noref(skb, &rth->dst);
1766 			goto out;
1767 		}
1768 	}
1769 
1770 	rth = rt_dst_alloc(out_dev->dev, 0, res->type,
1771 			   IN_DEV_CONF_GET(in_dev, NOPOLICY),
1772 			   IN_DEV_CONF_GET(out_dev, NOXFRM), do_cache);
1773 	if (!rth) {
1774 		err = -ENOBUFS;
1775 		goto cleanup;
1776 	}
1777 
1778 	rth->rt_is_input = 1;
1779 	RT_CACHE_STAT_INC(in_slow_tot);
1780 
1781 	rth->dst.input = ip_forward;
1782 
1783 	rt_set_nexthop(rth, daddr, res, fnhe, res->fi, res->type, itag,
1784 		       do_cache);
1785 	lwtunnel_set_redirect(&rth->dst);
1786 	skb_dst_set(skb, &rth->dst);
1787 out:
1788 	err = 0;
1789  cleanup:
1790 	return err;
1791 }
1792 
1793 #ifdef CONFIG_IP_ROUTE_MULTIPATH
1794 /* To make ICMP packets follow the right flow, the multipath hash is
1795  * calculated from the inner IP addresses.
1796  */
1797 static void ip_multipath_l3_keys(const struct sk_buff *skb,
1798 				 struct flow_keys *hash_keys)
1799 {
1800 	const struct iphdr *outer_iph = ip_hdr(skb);
1801 	const struct iphdr *key_iph = outer_iph;
1802 	const struct iphdr *inner_iph;
1803 	const struct icmphdr *icmph;
1804 	struct iphdr _inner_iph;
1805 	struct icmphdr _icmph;
1806 
1807 	if (likely(outer_iph->protocol != IPPROTO_ICMP))
1808 		goto out;
1809 
1810 	if (unlikely((outer_iph->frag_off & htons(IP_OFFSET)) != 0))
1811 		goto out;
1812 
1813 	icmph = skb_header_pointer(skb, outer_iph->ihl * 4, sizeof(_icmph),
1814 				   &_icmph);
1815 	if (!icmph)
1816 		goto out;
1817 
1818 	if (icmph->type != ICMP_DEST_UNREACH &&
1819 	    icmph->type != ICMP_REDIRECT &&
1820 	    icmph->type != ICMP_TIME_EXCEEDED &&
1821 	    icmph->type != ICMP_PARAMETERPROB)
1822 		goto out;
1823 
1824 	inner_iph = skb_header_pointer(skb,
1825 				       outer_iph->ihl * 4 + sizeof(_icmph),
1826 				       sizeof(_inner_iph), &_inner_iph);
1827 	if (!inner_iph)
1828 		goto out;
1829 
1830 	key_iph = inner_iph;
1831 out:
1832 	hash_keys->addrs.v4addrs.src = key_iph->saddr;
1833 	hash_keys->addrs.v4addrs.dst = key_iph->daddr;
1834 }
1835 
1836 /* if skb is set it will be used and fl4 can be NULL */
1837 int fib_multipath_hash(const struct net *net, const struct flowi4 *fl4,
1838 		       const struct sk_buff *skb, struct flow_keys *flkeys)
1839 {
1840 	struct flow_keys hash_keys;
1841 	u32 mhash;
1842 
1843 	switch (net->ipv4.sysctl_fib_multipath_hash_policy) {
1844 	case 0:
1845 		memset(&hash_keys, 0, sizeof(hash_keys));
1846 		hash_keys.control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
1847 		if (skb) {
1848 			ip_multipath_l3_keys(skb, &hash_keys);
1849 		} else {
1850 			hash_keys.addrs.v4addrs.src = fl4->saddr;
1851 			hash_keys.addrs.v4addrs.dst = fl4->daddr;
1852 		}
1853 		break;
1854 	case 1:
1855 		/* skb is currently provided only when forwarding */
1856 		if (skb) {
1857 			unsigned int flag = FLOW_DISSECTOR_F_STOP_AT_ENCAP;
1858 			struct flow_keys keys;
1859 
1860 			/* short-circuit if we already have L4 hash present */
1861 			if (skb->l4_hash)
1862 				return skb_get_hash_raw(skb) >> 1;
1863 
1864 			memset(&hash_keys, 0, sizeof(hash_keys));
1865 
1866 			if (!flkeys) {
1867 				skb_flow_dissect_flow_keys(skb, &keys, flag);
1868 				flkeys = &keys;
1869 			}
1870 
1871 			hash_keys.control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
1872 			hash_keys.addrs.v4addrs.src = flkeys->addrs.v4addrs.src;
1873 			hash_keys.addrs.v4addrs.dst = flkeys->addrs.v4addrs.dst;
1874 			hash_keys.ports.src = flkeys->ports.src;
1875 			hash_keys.ports.dst = flkeys->ports.dst;
1876 			hash_keys.basic.ip_proto = flkeys->basic.ip_proto;
1877 		} else {
1878 			memset(&hash_keys, 0, sizeof(hash_keys));
1879 			hash_keys.control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
1880 			hash_keys.addrs.v4addrs.src = fl4->saddr;
1881 			hash_keys.addrs.v4addrs.dst = fl4->daddr;
1882 			hash_keys.ports.src = fl4->fl4_sport;
1883 			hash_keys.ports.dst = fl4->fl4_dport;
1884 			hash_keys.basic.ip_proto = fl4->flowi4_proto;
1885 		}
1886 		break;
1887 	}
1888 	mhash = flow_hash_from_keys(&hash_keys);
1889 
1890 	return mhash >> 1;
1891 }
1892 #endif /* CONFIG_IP_ROUTE_MULTIPATH */
1893 
1894 static int ip_mkroute_input(struct sk_buff *skb,
1895 			    struct fib_result *res,
1896 			    struct in_device *in_dev,
1897 			    __be32 daddr, __be32 saddr, u32 tos,
1898 			    struct flow_keys *hkeys)
1899 {
1900 #ifdef CONFIG_IP_ROUTE_MULTIPATH
1901 	if (res->fi && res->fi->fib_nhs > 1) {
1902 		int h = fib_multipath_hash(res->fi->fib_net, NULL, skb, hkeys);
1903 
1904 		fib_select_multipath(res, h);
1905 	}
1906 #endif
1907 
1908 	/* create a routing cache entry */
1909 	return __mkroute_input(skb, res, in_dev, daddr, saddr, tos);
1910 }
1911 
1912 /*
1913  *	NOTE. We drop all the packets that has local source
1914  *	addresses, because every properly looped back packet
1915  *	must have correct destination already attached by output routine.
1916  *
1917  *	Such approach solves two big problems:
1918  *	1. Not simplex devices are handled properly.
1919  *	2. IP spoofing attempts are filtered with 100% of guarantee.
1920  *	called with rcu_read_lock()
1921  */
1922 
1923 static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1924 			       u8 tos, struct net_device *dev,
1925 			       struct fib_result *res)
1926 {
1927 	struct in_device *in_dev = __in_dev_get_rcu(dev);
1928 	struct flow_keys *flkeys = NULL, _flkeys;
1929 	struct net    *net = dev_net(dev);
1930 	struct ip_tunnel_info *tun_info;
1931 	int		err = -EINVAL;
1932 	unsigned int	flags = 0;
1933 	u32		itag = 0;
1934 	struct rtable	*rth;
1935 	struct flowi4	fl4;
1936 	bool do_cache;
1937 
1938 	/* IP on this device is disabled. */
1939 
1940 	if (!in_dev)
1941 		goto out;
1942 
1943 	/* Check for the most weird martians, which can be not detected
1944 	   by fib_lookup.
1945 	 */
1946 
1947 	tun_info = skb_tunnel_info(skb);
1948 	if (tun_info && !(tun_info->mode & IP_TUNNEL_INFO_TX))
1949 		fl4.flowi4_tun_key.tun_id = tun_info->key.tun_id;
1950 	else
1951 		fl4.flowi4_tun_key.tun_id = 0;
1952 	skb_dst_drop(skb);
1953 
1954 	if (ipv4_is_multicast(saddr) || ipv4_is_lbcast(saddr))
1955 		goto martian_source;
1956 
1957 	res->fi = NULL;
1958 	res->table = NULL;
1959 	if (ipv4_is_lbcast(daddr) || (saddr == 0 && daddr == 0))
1960 		goto brd_input;
1961 
1962 	/* Accept zero addresses only to limited broadcast;
1963 	 * I even do not know to fix it or not. Waiting for complains :-)
1964 	 */
1965 	if (ipv4_is_zeronet(saddr))
1966 		goto martian_source;
1967 
1968 	if (ipv4_is_zeronet(daddr))
1969 		goto martian_destination;
1970 
1971 	/* Following code try to avoid calling IN_DEV_NET_ROUTE_LOCALNET(),
1972 	 * and call it once if daddr or/and saddr are loopback addresses
1973 	 */
1974 	if (ipv4_is_loopback(daddr)) {
1975 		if (!IN_DEV_NET_ROUTE_LOCALNET(in_dev, net))
1976 			goto martian_destination;
1977 	} else if (ipv4_is_loopback(saddr)) {
1978 		if (!IN_DEV_NET_ROUTE_LOCALNET(in_dev, net))
1979 			goto martian_source;
1980 	}
1981 
1982 	/*
1983 	 *	Now we are ready to route packet.
1984 	 */
1985 	fl4.flowi4_oif = 0;
1986 	fl4.flowi4_iif = dev->ifindex;
1987 	fl4.flowi4_mark = skb->mark;
1988 	fl4.flowi4_tos = tos;
1989 	fl4.flowi4_scope = RT_SCOPE_UNIVERSE;
1990 	fl4.flowi4_flags = 0;
1991 	fl4.daddr = daddr;
1992 	fl4.saddr = saddr;
1993 	fl4.flowi4_uid = sock_net_uid(net, NULL);
1994 
1995 	if (fib4_rules_early_flow_dissect(net, skb, &fl4, &_flkeys))
1996 		flkeys = &_flkeys;
1997 
1998 	err = fib_lookup(net, &fl4, res, 0);
1999 	if (err != 0) {
2000 		if (!IN_DEV_FORWARD(in_dev))
2001 			err = -EHOSTUNREACH;
2002 		goto no_route;
2003 	}
2004 
2005 	if (res->type == RTN_BROADCAST)
2006 		goto brd_input;
2007 
2008 	if (res->type == RTN_LOCAL) {
2009 		err = fib_validate_source(skb, saddr, daddr, tos,
2010 					  0, dev, in_dev, &itag);
2011 		if (err < 0)
2012 			goto martian_source;
2013 		goto local_input;
2014 	}
2015 
2016 	if (!IN_DEV_FORWARD(in_dev)) {
2017 		err = -EHOSTUNREACH;
2018 		goto no_route;
2019 	}
2020 	if (res->type != RTN_UNICAST)
2021 		goto martian_destination;
2022 
2023 	err = ip_mkroute_input(skb, res, in_dev, daddr, saddr, tos, flkeys);
2024 out:	return err;
2025 
2026 brd_input:
2027 	if (skb->protocol != htons(ETH_P_IP))
2028 		goto e_inval;
2029 
2030 	if (!ipv4_is_zeronet(saddr)) {
2031 		err = fib_validate_source(skb, saddr, 0, tos, 0, dev,
2032 					  in_dev, &itag);
2033 		if (err < 0)
2034 			goto martian_source;
2035 	}
2036 	flags |= RTCF_BROADCAST;
2037 	res->type = RTN_BROADCAST;
2038 	RT_CACHE_STAT_INC(in_brd);
2039 
2040 local_input:
2041 	do_cache = false;
2042 	if (res->fi) {
2043 		if (!itag) {
2044 			rth = rcu_dereference(FIB_RES_NH(*res).nh_rth_input);
2045 			if (rt_cache_valid(rth)) {
2046 				skb_dst_set_noref(skb, &rth->dst);
2047 				err = 0;
2048 				goto out;
2049 			}
2050 			do_cache = true;
2051 		}
2052 	}
2053 
2054 	rth = rt_dst_alloc(l3mdev_master_dev_rcu(dev) ? : net->loopback_dev,
2055 			   flags | RTCF_LOCAL, res->type,
2056 			   IN_DEV_CONF_GET(in_dev, NOPOLICY), false, do_cache);
2057 	if (!rth)
2058 		goto e_nobufs;
2059 
2060 	rth->dst.output= ip_rt_bug;
2061 #ifdef CONFIG_IP_ROUTE_CLASSID
2062 	rth->dst.tclassid = itag;
2063 #endif
2064 	rth->rt_is_input = 1;
2065 
2066 	RT_CACHE_STAT_INC(in_slow_tot);
2067 	if (res->type == RTN_UNREACHABLE) {
2068 		rth->dst.input= ip_error;
2069 		rth->dst.error= -err;
2070 		rth->rt_flags 	&= ~RTCF_LOCAL;
2071 	}
2072 
2073 	if (do_cache) {
2074 		struct fib_nh *nh = &FIB_RES_NH(*res);
2075 
2076 		rth->dst.lwtstate = lwtstate_get(nh->nh_lwtstate);
2077 		if (lwtunnel_input_redirect(rth->dst.lwtstate)) {
2078 			WARN_ON(rth->dst.input == lwtunnel_input);
2079 			rth->dst.lwtstate->orig_input = rth->dst.input;
2080 			rth->dst.input = lwtunnel_input;
2081 		}
2082 
2083 		if (unlikely(!rt_cache_route(nh, rth)))
2084 			rt_add_uncached_list(rth);
2085 	}
2086 	skb_dst_set(skb, &rth->dst);
2087 	err = 0;
2088 	goto out;
2089 
2090 no_route:
2091 	RT_CACHE_STAT_INC(in_no_route);
2092 	res->type = RTN_UNREACHABLE;
2093 	res->fi = NULL;
2094 	res->table = NULL;
2095 	goto local_input;
2096 
2097 	/*
2098 	 *	Do not cache martian addresses: they should be logged (RFC1812)
2099 	 */
2100 martian_destination:
2101 	RT_CACHE_STAT_INC(in_martian_dst);
2102 #ifdef CONFIG_IP_ROUTE_VERBOSE
2103 	if (IN_DEV_LOG_MARTIANS(in_dev))
2104 		net_warn_ratelimited("martian destination %pI4 from %pI4, dev %s\n",
2105 				     &daddr, &saddr, dev->name);
2106 #endif
2107 
2108 e_inval:
2109 	err = -EINVAL;
2110 	goto out;
2111 
2112 e_nobufs:
2113 	err = -ENOBUFS;
2114 	goto out;
2115 
2116 martian_source:
2117 	ip_handle_martian_source(dev, in_dev, skb, daddr, saddr);
2118 	goto out;
2119 }
2120 
2121 int ip_route_input_noref(struct sk_buff *skb, __be32 daddr, __be32 saddr,
2122 			 u8 tos, struct net_device *dev)
2123 {
2124 	struct fib_result res;
2125 	int err;
2126 
2127 	tos &= IPTOS_RT_MASK;
2128 	rcu_read_lock();
2129 	err = ip_route_input_rcu(skb, daddr, saddr, tos, dev, &res);
2130 	rcu_read_unlock();
2131 
2132 	return err;
2133 }
2134 EXPORT_SYMBOL(ip_route_input_noref);
2135 
2136 /* called with rcu_read_lock held */
2137 int ip_route_input_rcu(struct sk_buff *skb, __be32 daddr, __be32 saddr,
2138 		       u8 tos, struct net_device *dev, struct fib_result *res)
2139 {
2140 	/* Multicast recognition logic is moved from route cache to here.
2141 	   The problem was that too many Ethernet cards have broken/missing
2142 	   hardware multicast filters :-( As result the host on multicasting
2143 	   network acquires a lot of useless route cache entries, sort of
2144 	   SDR messages from all the world. Now we try to get rid of them.
2145 	   Really, provided software IP multicast filter is organized
2146 	   reasonably (at least, hashed), it does not result in a slowdown
2147 	   comparing with route cache reject entries.
2148 	   Note, that multicast routers are not affected, because
2149 	   route cache entry is created eventually.
2150 	 */
2151 	if (ipv4_is_multicast(daddr)) {
2152 		struct in_device *in_dev = __in_dev_get_rcu(dev);
2153 		int our = 0;
2154 		int err = -EINVAL;
2155 
2156 		if (in_dev)
2157 			our = ip_check_mc_rcu(in_dev, daddr, saddr,
2158 					      ip_hdr(skb)->protocol);
2159 
2160 		/* check l3 master if no match yet */
2161 		if ((!in_dev || !our) && netif_is_l3_slave(dev)) {
2162 			struct in_device *l3_in_dev;
2163 
2164 			l3_in_dev = __in_dev_get_rcu(skb->dev);
2165 			if (l3_in_dev)
2166 				our = ip_check_mc_rcu(l3_in_dev, daddr, saddr,
2167 						      ip_hdr(skb)->protocol);
2168 		}
2169 
2170 		if (our
2171 #ifdef CONFIG_IP_MROUTE
2172 			||
2173 		    (!ipv4_is_local_multicast(daddr) &&
2174 		     IN_DEV_MFORWARD(in_dev))
2175 #endif
2176 		   ) {
2177 			err = ip_route_input_mc(skb, daddr, saddr,
2178 						tos, dev, our);
2179 		}
2180 		return err;
2181 	}
2182 
2183 	return ip_route_input_slow(skb, daddr, saddr, tos, dev, res);
2184 }
2185 
2186 /* called with rcu_read_lock() */
2187 static struct rtable *__mkroute_output(const struct fib_result *res,
2188 				       const struct flowi4 *fl4, int orig_oif,
2189 				       struct net_device *dev_out,
2190 				       unsigned int flags)
2191 {
2192 	struct fib_info *fi = res->fi;
2193 	struct fib_nh_exception *fnhe;
2194 	struct in_device *in_dev;
2195 	u16 type = res->type;
2196 	struct rtable *rth;
2197 	bool do_cache;
2198 
2199 	in_dev = __in_dev_get_rcu(dev_out);
2200 	if (!in_dev)
2201 		return ERR_PTR(-EINVAL);
2202 
2203 	if (likely(!IN_DEV_ROUTE_LOCALNET(in_dev)))
2204 		if (ipv4_is_loopback(fl4->saddr) &&
2205 		    !(dev_out->flags & IFF_LOOPBACK) &&
2206 		    !netif_is_l3_master(dev_out))
2207 			return ERR_PTR(-EINVAL);
2208 
2209 	if (ipv4_is_lbcast(fl4->daddr))
2210 		type = RTN_BROADCAST;
2211 	else if (ipv4_is_multicast(fl4->daddr))
2212 		type = RTN_MULTICAST;
2213 	else if (ipv4_is_zeronet(fl4->daddr))
2214 		return ERR_PTR(-EINVAL);
2215 
2216 	if (dev_out->flags & IFF_LOOPBACK)
2217 		flags |= RTCF_LOCAL;
2218 
2219 	do_cache = true;
2220 	if (type == RTN_BROADCAST) {
2221 		flags |= RTCF_BROADCAST | RTCF_LOCAL;
2222 		fi = NULL;
2223 	} else if (type == RTN_MULTICAST) {
2224 		flags |= RTCF_MULTICAST | RTCF_LOCAL;
2225 		if (!ip_check_mc_rcu(in_dev, fl4->daddr, fl4->saddr,
2226 				     fl4->flowi4_proto))
2227 			flags &= ~RTCF_LOCAL;
2228 		else
2229 			do_cache = false;
2230 		/* If multicast route do not exist use
2231 		 * default one, but do not gateway in this case.
2232 		 * Yes, it is hack.
2233 		 */
2234 		if (fi && res->prefixlen < 4)
2235 			fi = NULL;
2236 	} else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
2237 		   (orig_oif != dev_out->ifindex)) {
2238 		/* For local routes that require a particular output interface
2239 		 * we do not want to cache the result.  Caching the result
2240 		 * causes incorrect behaviour when there are multiple source
2241 		 * addresses on the interface, the end result being that if the
2242 		 * intended recipient is waiting on that interface for the
2243 		 * packet he won't receive it because it will be delivered on
2244 		 * the loopback interface and the IP_PKTINFO ipi_ifindex will
2245 		 * be set to the loopback interface as well.
2246 		 */
2247 		do_cache = false;
2248 	}
2249 
2250 	fnhe = NULL;
2251 	do_cache &= fi != NULL;
2252 	if (fi) {
2253 		struct rtable __rcu **prth;
2254 		struct fib_nh *nh = &FIB_RES_NH(*res);
2255 
2256 		fnhe = find_exception(nh, fl4->daddr);
2257 		if (!do_cache)
2258 			goto add;
2259 		if (fnhe) {
2260 			prth = &fnhe->fnhe_rth_output;
2261 		} else {
2262 			if (unlikely(fl4->flowi4_flags &
2263 				     FLOWI_FLAG_KNOWN_NH &&
2264 				     !(nh->nh_gw &&
2265 				       nh->nh_scope == RT_SCOPE_LINK))) {
2266 				do_cache = false;
2267 				goto add;
2268 			}
2269 			prth = raw_cpu_ptr(nh->nh_pcpu_rth_output);
2270 		}
2271 		rth = rcu_dereference(*prth);
2272 		if (rt_cache_valid(rth) && dst_hold_safe(&rth->dst))
2273 			return rth;
2274 	}
2275 
2276 add:
2277 	rth = rt_dst_alloc(dev_out, flags, type,
2278 			   IN_DEV_CONF_GET(in_dev, NOPOLICY),
2279 			   IN_DEV_CONF_GET(in_dev, NOXFRM),
2280 			   do_cache);
2281 	if (!rth)
2282 		return ERR_PTR(-ENOBUFS);
2283 
2284 	rth->rt_iif = orig_oif;
2285 
2286 	RT_CACHE_STAT_INC(out_slow_tot);
2287 
2288 	if (flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {
2289 		if (flags & RTCF_LOCAL &&
2290 		    !(dev_out->flags & IFF_LOOPBACK)) {
2291 			rth->dst.output = ip_mc_output;
2292 			RT_CACHE_STAT_INC(out_slow_mc);
2293 		}
2294 #ifdef CONFIG_IP_MROUTE
2295 		if (type == RTN_MULTICAST) {
2296 			if (IN_DEV_MFORWARD(in_dev) &&
2297 			    !ipv4_is_local_multicast(fl4->daddr)) {
2298 				rth->dst.input = ip_mr_input;
2299 				rth->dst.output = ip_mc_output;
2300 			}
2301 		}
2302 #endif
2303 	}
2304 
2305 	rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0, do_cache);
2306 	lwtunnel_set_redirect(&rth->dst);
2307 
2308 	return rth;
2309 }
2310 
2311 /*
2312  * Major route resolver routine.
2313  */
2314 
2315 struct rtable *ip_route_output_key_hash(struct net *net, struct flowi4 *fl4,
2316 					const struct sk_buff *skb)
2317 {
2318 	__u8 tos = RT_FL_TOS(fl4);
2319 	struct fib_result res = {
2320 		.type		= RTN_UNSPEC,
2321 		.fi		= NULL,
2322 		.table		= NULL,
2323 		.tclassid	= 0,
2324 	};
2325 	struct rtable *rth;
2326 
2327 	fl4->flowi4_iif = LOOPBACK_IFINDEX;
2328 	fl4->flowi4_tos = tos & IPTOS_RT_MASK;
2329 	fl4->flowi4_scope = ((tos & RTO_ONLINK) ?
2330 			 RT_SCOPE_LINK : RT_SCOPE_UNIVERSE);
2331 
2332 	rcu_read_lock();
2333 	rth = ip_route_output_key_hash_rcu(net, fl4, &res, skb);
2334 	rcu_read_unlock();
2335 
2336 	return rth;
2337 }
2338 EXPORT_SYMBOL_GPL(ip_route_output_key_hash);
2339 
2340 struct rtable *ip_route_output_key_hash_rcu(struct net *net, struct flowi4 *fl4,
2341 					    struct fib_result *res,
2342 					    const struct sk_buff *skb)
2343 {
2344 	struct net_device *dev_out = NULL;
2345 	int orig_oif = fl4->flowi4_oif;
2346 	unsigned int flags = 0;
2347 	struct rtable *rth;
2348 	int err = -ENETUNREACH;
2349 
2350 	if (fl4->saddr) {
2351 		rth = ERR_PTR(-EINVAL);
2352 		if (ipv4_is_multicast(fl4->saddr) ||
2353 		    ipv4_is_lbcast(fl4->saddr) ||
2354 		    ipv4_is_zeronet(fl4->saddr))
2355 			goto out;
2356 
2357 		/* I removed check for oif == dev_out->oif here.
2358 		   It was wrong for two reasons:
2359 		   1. ip_dev_find(net, saddr) can return wrong iface, if saddr
2360 		      is assigned to multiple interfaces.
2361 		   2. Moreover, we are allowed to send packets with saddr
2362 		      of another iface. --ANK
2363 		 */
2364 
2365 		if (fl4->flowi4_oif == 0 &&
2366 		    (ipv4_is_multicast(fl4->daddr) ||
2367 		     ipv4_is_lbcast(fl4->daddr))) {
2368 			/* It is equivalent to inet_addr_type(saddr) == RTN_LOCAL */
2369 			dev_out = __ip_dev_find(net, fl4->saddr, false);
2370 			if (!dev_out)
2371 				goto out;
2372 
2373 			/* Special hack: user can direct multicasts
2374 			   and limited broadcast via necessary interface
2375 			   without fiddling with IP_MULTICAST_IF or IP_PKTINFO.
2376 			   This hack is not just for fun, it allows
2377 			   vic,vat and friends to work.
2378 			   They bind socket to loopback, set ttl to zero
2379 			   and expect that it will work.
2380 			   From the viewpoint of routing cache they are broken,
2381 			   because we are not allowed to build multicast path
2382 			   with loopback source addr (look, routing cache
2383 			   cannot know, that ttl is zero, so that packet
2384 			   will not leave this host and route is valid).
2385 			   Luckily, this hack is good workaround.
2386 			 */
2387 
2388 			fl4->flowi4_oif = dev_out->ifindex;
2389 			goto make_route;
2390 		}
2391 
2392 		if (!(fl4->flowi4_flags & FLOWI_FLAG_ANYSRC)) {
2393 			/* It is equivalent to inet_addr_type(saddr) == RTN_LOCAL */
2394 			if (!__ip_dev_find(net, fl4->saddr, false))
2395 				goto out;
2396 		}
2397 	}
2398 
2399 
2400 	if (fl4->flowi4_oif) {
2401 		dev_out = dev_get_by_index_rcu(net, fl4->flowi4_oif);
2402 		rth = ERR_PTR(-ENODEV);
2403 		if (!dev_out)
2404 			goto out;
2405 
2406 		/* RACE: Check return value of inet_select_addr instead. */
2407 		if (!(dev_out->flags & IFF_UP) || !__in_dev_get_rcu(dev_out)) {
2408 			rth = ERR_PTR(-ENETUNREACH);
2409 			goto out;
2410 		}
2411 		if (ipv4_is_local_multicast(fl4->daddr) ||
2412 		    ipv4_is_lbcast(fl4->daddr) ||
2413 		    fl4->flowi4_proto == IPPROTO_IGMP) {
2414 			if (!fl4->saddr)
2415 				fl4->saddr = inet_select_addr(dev_out, 0,
2416 							      RT_SCOPE_LINK);
2417 			goto make_route;
2418 		}
2419 		if (!fl4->saddr) {
2420 			if (ipv4_is_multicast(fl4->daddr))
2421 				fl4->saddr = inet_select_addr(dev_out, 0,
2422 							      fl4->flowi4_scope);
2423 			else if (!fl4->daddr)
2424 				fl4->saddr = inet_select_addr(dev_out, 0,
2425 							      RT_SCOPE_HOST);
2426 		}
2427 	}
2428 
2429 	if (!fl4->daddr) {
2430 		fl4->daddr = fl4->saddr;
2431 		if (!fl4->daddr)
2432 			fl4->daddr = fl4->saddr = htonl(INADDR_LOOPBACK);
2433 		dev_out = net->loopback_dev;
2434 		fl4->flowi4_oif = LOOPBACK_IFINDEX;
2435 		res->type = RTN_LOCAL;
2436 		flags |= RTCF_LOCAL;
2437 		goto make_route;
2438 	}
2439 
2440 	err = fib_lookup(net, fl4, res, 0);
2441 	if (err) {
2442 		res->fi = NULL;
2443 		res->table = NULL;
2444 		if (fl4->flowi4_oif &&
2445 		    (ipv4_is_multicast(fl4->daddr) ||
2446 		    !netif_index_is_l3_master(net, fl4->flowi4_oif))) {
2447 			/* Apparently, routing tables are wrong. Assume,
2448 			   that the destination is on link.
2449 
2450 			   WHY? DW.
2451 			   Because we are allowed to send to iface
2452 			   even if it has NO routes and NO assigned
2453 			   addresses. When oif is specified, routing
2454 			   tables are looked up with only one purpose:
2455 			   to catch if destination is gatewayed, rather than
2456 			   direct. Moreover, if MSG_DONTROUTE is set,
2457 			   we send packet, ignoring both routing tables
2458 			   and ifaddr state. --ANK
2459 
2460 
2461 			   We could make it even if oif is unknown,
2462 			   likely IPv6, but we do not.
2463 			 */
2464 
2465 			if (fl4->saddr == 0)
2466 				fl4->saddr = inet_select_addr(dev_out, 0,
2467 							      RT_SCOPE_LINK);
2468 			res->type = RTN_UNICAST;
2469 			goto make_route;
2470 		}
2471 		rth = ERR_PTR(err);
2472 		goto out;
2473 	}
2474 
2475 	if (res->type == RTN_LOCAL) {
2476 		if (!fl4->saddr) {
2477 			if (res->fi->fib_prefsrc)
2478 				fl4->saddr = res->fi->fib_prefsrc;
2479 			else
2480 				fl4->saddr = fl4->daddr;
2481 		}
2482 
2483 		/* L3 master device is the loopback for that domain */
2484 		dev_out = l3mdev_master_dev_rcu(FIB_RES_DEV(*res)) ? :
2485 			net->loopback_dev;
2486 
2487 		/* make sure orig_oif points to fib result device even
2488 		 * though packet rx/tx happens over loopback or l3mdev
2489 		 */
2490 		orig_oif = FIB_RES_OIF(*res);
2491 
2492 		fl4->flowi4_oif = dev_out->ifindex;
2493 		flags |= RTCF_LOCAL;
2494 		goto make_route;
2495 	}
2496 
2497 	fib_select_path(net, res, fl4, skb);
2498 
2499 	dev_out = FIB_RES_DEV(*res);
2500 	fl4->flowi4_oif = dev_out->ifindex;
2501 
2502 
2503 make_route:
2504 	rth = __mkroute_output(res, fl4, orig_oif, dev_out, flags);
2505 
2506 out:
2507 	return rth;
2508 }
2509 
2510 static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 cookie)
2511 {
2512 	return NULL;
2513 }
2514 
2515 static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)
2516 {
2517 	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
2518 
2519 	return mtu ? : dst->dev->mtu;
2520 }
2521 
2522 static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
2523 					  struct sk_buff *skb, u32 mtu)
2524 {
2525 }
2526 
2527 static void ipv4_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
2528 				       struct sk_buff *skb)
2529 {
2530 }
2531 
2532 static u32 *ipv4_rt_blackhole_cow_metrics(struct dst_entry *dst,
2533 					  unsigned long old)
2534 {
2535 	return NULL;
2536 }
2537 
2538 static struct dst_ops ipv4_dst_blackhole_ops = {
2539 	.family			=	AF_INET,
2540 	.check			=	ipv4_blackhole_dst_check,
2541 	.mtu			=	ipv4_blackhole_mtu,
2542 	.default_advmss		=	ipv4_default_advmss,
2543 	.update_pmtu		=	ipv4_rt_blackhole_update_pmtu,
2544 	.redirect		=	ipv4_rt_blackhole_redirect,
2545 	.cow_metrics		=	ipv4_rt_blackhole_cow_metrics,
2546 	.neigh_lookup		=	ipv4_neigh_lookup,
2547 };
2548 
2549 struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_orig)
2550 {
2551 	struct rtable *ort = (struct rtable *) dst_orig;
2552 	struct rtable *rt;
2553 
2554 	rt = dst_alloc(&ipv4_dst_blackhole_ops, NULL, 1, DST_OBSOLETE_DEAD, 0);
2555 	if (rt) {
2556 		struct dst_entry *new = &rt->dst;
2557 
2558 		new->__use = 1;
2559 		new->input = dst_discard;
2560 		new->output = dst_discard_out;
2561 
2562 		new->dev = net->loopback_dev;
2563 		if (new->dev)
2564 			dev_hold(new->dev);
2565 
2566 		rt->rt_is_input = ort->rt_is_input;
2567 		rt->rt_iif = ort->rt_iif;
2568 		rt->rt_pmtu = ort->rt_pmtu;
2569 		rt->rt_mtu_locked = ort->rt_mtu_locked;
2570 
2571 		rt->rt_genid = rt_genid_ipv4(net);
2572 		rt->rt_flags = ort->rt_flags;
2573 		rt->rt_type = ort->rt_type;
2574 		rt->rt_gateway = ort->rt_gateway;
2575 		rt->rt_uses_gateway = ort->rt_uses_gateway;
2576 
2577 		INIT_LIST_HEAD(&rt->rt_uncached);
2578 	}
2579 
2580 	dst_release(dst_orig);
2581 
2582 	return rt ? &rt->dst : ERR_PTR(-ENOMEM);
2583 }
2584 
2585 struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4,
2586 				    const struct sock *sk)
2587 {
2588 	struct rtable *rt = __ip_route_output_key(net, flp4);
2589 
2590 	if (IS_ERR(rt))
2591 		return rt;
2592 
2593 	if (flp4->flowi4_proto)
2594 		rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst,
2595 							flowi4_to_flowi(flp4),
2596 							sk, 0);
2597 
2598 	return rt;
2599 }
2600 EXPORT_SYMBOL_GPL(ip_route_output_flow);
2601 
2602 /* called with rcu_read_lock held */
2603 static int rt_fill_info(struct net *net,  __be32 dst, __be32 src, u32 table_id,
2604 			struct flowi4 *fl4, struct sk_buff *skb, u32 portid,
2605 			u32 seq)
2606 {
2607 	struct rtable *rt = skb_rtable(skb);
2608 	struct rtmsg *r;
2609 	struct nlmsghdr *nlh;
2610 	unsigned long expires = 0;
2611 	u32 error;
2612 	u32 metrics[RTAX_MAX];
2613 
2614 	nlh = nlmsg_put(skb, portid, seq, RTM_NEWROUTE, sizeof(*r), 0);
2615 	if (!nlh)
2616 		return -EMSGSIZE;
2617 
2618 	r = nlmsg_data(nlh);
2619 	r->rtm_family	 = AF_INET;
2620 	r->rtm_dst_len	= 32;
2621 	r->rtm_src_len	= 0;
2622 	r->rtm_tos	= fl4->flowi4_tos;
2623 	r->rtm_table	= table_id < 256 ? table_id : RT_TABLE_COMPAT;
2624 	if (nla_put_u32(skb, RTA_TABLE, table_id))
2625 		goto nla_put_failure;
2626 	r->rtm_type	= rt->rt_type;
2627 	r->rtm_scope	= RT_SCOPE_UNIVERSE;
2628 	r->rtm_protocol = RTPROT_UNSPEC;
2629 	r->rtm_flags	= (rt->rt_flags & ~0xFFFF) | RTM_F_CLONED;
2630 	if (rt->rt_flags & RTCF_NOTIFY)
2631 		r->rtm_flags |= RTM_F_NOTIFY;
2632 	if (IPCB(skb)->flags & IPSKB_DOREDIRECT)
2633 		r->rtm_flags |= RTCF_DOREDIRECT;
2634 
2635 	if (nla_put_in_addr(skb, RTA_DST, dst))
2636 		goto nla_put_failure;
2637 	if (src) {
2638 		r->rtm_src_len = 32;
2639 		if (nla_put_in_addr(skb, RTA_SRC, src))
2640 			goto nla_put_failure;
2641 	}
2642 	if (rt->dst.dev &&
2643 	    nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex))
2644 		goto nla_put_failure;
2645 #ifdef CONFIG_IP_ROUTE_CLASSID
2646 	if (rt->dst.tclassid &&
2647 	    nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid))
2648 		goto nla_put_failure;
2649 #endif
2650 	if (!rt_is_input_route(rt) &&
2651 	    fl4->saddr != src) {
2652 		if (nla_put_in_addr(skb, RTA_PREFSRC, fl4->saddr))
2653 			goto nla_put_failure;
2654 	}
2655 	if (rt->rt_uses_gateway &&
2656 	    nla_put_in_addr(skb, RTA_GATEWAY, rt->rt_gateway))
2657 		goto nla_put_failure;
2658 
2659 	expires = rt->dst.expires;
2660 	if (expires) {
2661 		unsigned long now = jiffies;
2662 
2663 		if (time_before(now, expires))
2664 			expires -= now;
2665 		else
2666 			expires = 0;
2667 	}
2668 
2669 	memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics));
2670 	if (rt->rt_pmtu && expires)
2671 		metrics[RTAX_MTU - 1] = rt->rt_pmtu;
2672 	if (rt->rt_mtu_locked && expires)
2673 		metrics[RTAX_LOCK - 1] |= BIT(RTAX_MTU);
2674 	if (rtnetlink_put_metrics(skb, metrics) < 0)
2675 		goto nla_put_failure;
2676 
2677 	if (fl4->flowi4_mark &&
2678 	    nla_put_u32(skb, RTA_MARK, fl4->flowi4_mark))
2679 		goto nla_put_failure;
2680 
2681 	if (!uid_eq(fl4->flowi4_uid, INVALID_UID) &&
2682 	    nla_put_u32(skb, RTA_UID,
2683 			from_kuid_munged(current_user_ns(), fl4->flowi4_uid)))
2684 		goto nla_put_failure;
2685 
2686 	error = rt->dst.error;
2687 
2688 	if (rt_is_input_route(rt)) {
2689 #ifdef CONFIG_IP_MROUTE
2690 		if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) &&
2691 		    IPV4_DEVCONF_ALL(net, MC_FORWARDING)) {
2692 			int err = ipmr_get_route(net, skb,
2693 						 fl4->saddr, fl4->daddr,
2694 						 r, portid);
2695 
2696 			if (err <= 0) {
2697 				if (err == 0)
2698 					return 0;
2699 				goto nla_put_failure;
2700 			}
2701 		} else
2702 #endif
2703 			if (nla_put_u32(skb, RTA_IIF, skb->dev->ifindex))
2704 				goto nla_put_failure;
2705 	}
2706 
2707 	if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0)
2708 		goto nla_put_failure;
2709 
2710 	nlmsg_end(skb, nlh);
2711 	return 0;
2712 
2713 nla_put_failure:
2714 	nlmsg_cancel(skb, nlh);
2715 	return -EMSGSIZE;
2716 }
2717 
2718 static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
2719 			     struct netlink_ext_ack *extack)
2720 {
2721 	struct net *net = sock_net(in_skb->sk);
2722 	struct rtmsg *rtm;
2723 	struct nlattr *tb[RTA_MAX+1];
2724 	struct fib_result res = {};
2725 	struct rtable *rt = NULL;
2726 	struct flowi4 fl4;
2727 	__be32 dst = 0;
2728 	__be32 src = 0;
2729 	u32 iif;
2730 	int err;
2731 	int mark;
2732 	struct sk_buff *skb;
2733 	u32 table_id = RT_TABLE_MAIN;
2734 	kuid_t uid;
2735 
2736 	err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy,
2737 			  extack);
2738 	if (err < 0)
2739 		goto errout;
2740 
2741 	rtm = nlmsg_data(nlh);
2742 
2743 	skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
2744 	if (!skb) {
2745 		err = -ENOBUFS;
2746 		goto errout;
2747 	}
2748 
2749 	/* Reserve room for dummy headers, this skb can pass
2750 	   through good chunk of routing engine.
2751 	 */
2752 	skb_reset_mac_header(skb);
2753 	skb_reset_network_header(skb);
2754 
2755 	src = tb[RTA_SRC] ? nla_get_in_addr(tb[RTA_SRC]) : 0;
2756 	dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0;
2757 	iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
2758 	mark = tb[RTA_MARK] ? nla_get_u32(tb[RTA_MARK]) : 0;
2759 	if (tb[RTA_UID])
2760 		uid = make_kuid(current_user_ns(), nla_get_u32(tb[RTA_UID]));
2761 	else
2762 		uid = (iif ? INVALID_UID : current_uid());
2763 
2764 	/* Bugfix: need to give ip_route_input enough of an IP header to
2765 	 * not gag.
2766 	 */
2767 	ip_hdr(skb)->protocol = IPPROTO_UDP;
2768 	ip_hdr(skb)->saddr = src;
2769 	ip_hdr(skb)->daddr = dst;
2770 
2771 	skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
2772 
2773 	memset(&fl4, 0, sizeof(fl4));
2774 	fl4.daddr = dst;
2775 	fl4.saddr = src;
2776 	fl4.flowi4_tos = rtm->rtm_tos;
2777 	fl4.flowi4_oif = tb[RTA_OIF] ? nla_get_u32(tb[RTA_OIF]) : 0;
2778 	fl4.flowi4_mark = mark;
2779 	fl4.flowi4_uid = uid;
2780 
2781 	rcu_read_lock();
2782 
2783 	if (iif) {
2784 		struct net_device *dev;
2785 
2786 		dev = dev_get_by_index_rcu(net, iif);
2787 		if (!dev) {
2788 			err = -ENODEV;
2789 			goto errout_free;
2790 		}
2791 
2792 		skb->protocol	= htons(ETH_P_IP);
2793 		skb->dev	= dev;
2794 		skb->mark	= mark;
2795 		err = ip_route_input_rcu(skb, dst, src, rtm->rtm_tos,
2796 					 dev, &res);
2797 
2798 		rt = skb_rtable(skb);
2799 		if (err == 0 && rt->dst.error)
2800 			err = -rt->dst.error;
2801 	} else {
2802 		fl4.flowi4_iif = LOOPBACK_IFINDEX;
2803 		rt = ip_route_output_key_hash_rcu(net, &fl4, &res, skb);
2804 		err = 0;
2805 		if (IS_ERR(rt))
2806 			err = PTR_ERR(rt);
2807 		else
2808 			skb_dst_set(skb, &rt->dst);
2809 	}
2810 
2811 	if (err)
2812 		goto errout_free;
2813 
2814 	if (rtm->rtm_flags & RTM_F_NOTIFY)
2815 		rt->rt_flags |= RTCF_NOTIFY;
2816 
2817 	if (rtm->rtm_flags & RTM_F_LOOKUP_TABLE)
2818 		table_id = res.table ? res.table->tb_id : 0;
2819 
2820 	if (rtm->rtm_flags & RTM_F_FIB_MATCH) {
2821 		if (!res.fi) {
2822 			err = fib_props[res.type].error;
2823 			if (!err)
2824 				err = -EHOSTUNREACH;
2825 			goto errout_free;
2826 		}
2827 		err = fib_dump_info(skb, NETLINK_CB(in_skb).portid,
2828 				    nlh->nlmsg_seq, RTM_NEWROUTE, table_id,
2829 				    rt->rt_type, res.prefix, res.prefixlen,
2830 				    fl4.flowi4_tos, res.fi, 0);
2831 	} else {
2832 		err = rt_fill_info(net, dst, src, table_id, &fl4, skb,
2833 				   NETLINK_CB(in_skb).portid, nlh->nlmsg_seq);
2834 	}
2835 	if (err < 0)
2836 		goto errout_free;
2837 
2838 	rcu_read_unlock();
2839 
2840 	err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid);
2841 errout:
2842 	return err;
2843 
2844 errout_free:
2845 	rcu_read_unlock();
2846 	kfree_skb(skb);
2847 	goto errout;
2848 }
2849 
2850 void ip_rt_multicast_event(struct in_device *in_dev)
2851 {
2852 	rt_cache_flush(dev_net(in_dev->dev));
2853 }
2854 
2855 #ifdef CONFIG_SYSCTL
2856 static int ip_rt_gc_interval __read_mostly  = 60 * HZ;
2857 static int ip_rt_gc_min_interval __read_mostly	= HZ / 2;
2858 static int ip_rt_gc_elasticity __read_mostly	= 8;
2859 static int ip_min_valid_pmtu __read_mostly	= IPV4_MIN_MTU;
2860 
2861 static int ipv4_sysctl_rtcache_flush(struct ctl_table *__ctl, int write,
2862 					void __user *buffer,
2863 					size_t *lenp, loff_t *ppos)
2864 {
2865 	struct net *net = (struct net *)__ctl->extra1;
2866 
2867 	if (write) {
2868 		rt_cache_flush(net);
2869 		fnhe_genid_bump(net);
2870 		return 0;
2871 	}
2872 
2873 	return -EINVAL;
2874 }
2875 
2876 static struct ctl_table ipv4_route_table[] = {
2877 	{
2878 		.procname	= "gc_thresh",
2879 		.data		= &ipv4_dst_ops.gc_thresh,
2880 		.maxlen		= sizeof(int),
2881 		.mode		= 0644,
2882 		.proc_handler	= proc_dointvec,
2883 	},
2884 	{
2885 		.procname	= "max_size",
2886 		.data		= &ip_rt_max_size,
2887 		.maxlen		= sizeof(int),
2888 		.mode		= 0644,
2889 		.proc_handler	= proc_dointvec,
2890 	},
2891 	{
2892 		/*  Deprecated. Use gc_min_interval_ms */
2893 
2894 		.procname	= "gc_min_interval",
2895 		.data		= &ip_rt_gc_min_interval,
2896 		.maxlen		= sizeof(int),
2897 		.mode		= 0644,
2898 		.proc_handler	= proc_dointvec_jiffies,
2899 	},
2900 	{
2901 		.procname	= "gc_min_interval_ms",
2902 		.data		= &ip_rt_gc_min_interval,
2903 		.maxlen		= sizeof(int),
2904 		.mode		= 0644,
2905 		.proc_handler	= proc_dointvec_ms_jiffies,
2906 	},
2907 	{
2908 		.procname	= "gc_timeout",
2909 		.data		= &ip_rt_gc_timeout,
2910 		.maxlen		= sizeof(int),
2911 		.mode		= 0644,
2912 		.proc_handler	= proc_dointvec_jiffies,
2913 	},
2914 	{
2915 		.procname	= "gc_interval",
2916 		.data		= &ip_rt_gc_interval,
2917 		.maxlen		= sizeof(int),
2918 		.mode		= 0644,
2919 		.proc_handler	= proc_dointvec_jiffies,
2920 	},
2921 	{
2922 		.procname	= "redirect_load",
2923 		.data		= &ip_rt_redirect_load,
2924 		.maxlen		= sizeof(int),
2925 		.mode		= 0644,
2926 		.proc_handler	= proc_dointvec,
2927 	},
2928 	{
2929 		.procname	= "redirect_number",
2930 		.data		= &ip_rt_redirect_number,
2931 		.maxlen		= sizeof(int),
2932 		.mode		= 0644,
2933 		.proc_handler	= proc_dointvec,
2934 	},
2935 	{
2936 		.procname	= "redirect_silence",
2937 		.data		= &ip_rt_redirect_silence,
2938 		.maxlen		= sizeof(int),
2939 		.mode		= 0644,
2940 		.proc_handler	= proc_dointvec,
2941 	},
2942 	{
2943 		.procname	= "error_cost",
2944 		.data		= &ip_rt_error_cost,
2945 		.maxlen		= sizeof(int),
2946 		.mode		= 0644,
2947 		.proc_handler	= proc_dointvec,
2948 	},
2949 	{
2950 		.procname	= "error_burst",
2951 		.data		= &ip_rt_error_burst,
2952 		.maxlen		= sizeof(int),
2953 		.mode		= 0644,
2954 		.proc_handler	= proc_dointvec,
2955 	},
2956 	{
2957 		.procname	= "gc_elasticity",
2958 		.data		= &ip_rt_gc_elasticity,
2959 		.maxlen		= sizeof(int),
2960 		.mode		= 0644,
2961 		.proc_handler	= proc_dointvec,
2962 	},
2963 	{
2964 		.procname	= "mtu_expires",
2965 		.data		= &ip_rt_mtu_expires,
2966 		.maxlen		= sizeof(int),
2967 		.mode		= 0644,
2968 		.proc_handler	= proc_dointvec_jiffies,
2969 	},
2970 	{
2971 		.procname	= "min_pmtu",
2972 		.data		= &ip_rt_min_pmtu,
2973 		.maxlen		= sizeof(int),
2974 		.mode		= 0644,
2975 		.proc_handler	= proc_dointvec_minmax,
2976 		.extra1		= &ip_min_valid_pmtu,
2977 	},
2978 	{
2979 		.procname	= "min_adv_mss",
2980 		.data		= &ip_rt_min_advmss,
2981 		.maxlen		= sizeof(int),
2982 		.mode		= 0644,
2983 		.proc_handler	= proc_dointvec,
2984 	},
2985 	{ }
2986 };
2987 
2988 static struct ctl_table ipv4_route_flush_table[] = {
2989 	{
2990 		.procname	= "flush",
2991 		.maxlen		= sizeof(int),
2992 		.mode		= 0200,
2993 		.proc_handler	= ipv4_sysctl_rtcache_flush,
2994 	},
2995 	{ },
2996 };
2997 
2998 static __net_init int sysctl_route_net_init(struct net *net)
2999 {
3000 	struct ctl_table *tbl;
3001 
3002 	tbl = ipv4_route_flush_table;
3003 	if (!net_eq(net, &init_net)) {
3004 		tbl = kmemdup(tbl, sizeof(ipv4_route_flush_table), GFP_KERNEL);
3005 		if (!tbl)
3006 			goto err_dup;
3007 
3008 		/* Don't export sysctls to unprivileged users */
3009 		if (net->user_ns != &init_user_ns)
3010 			tbl[0].procname = NULL;
3011 	}
3012 	tbl[0].extra1 = net;
3013 
3014 	net->ipv4.route_hdr = register_net_sysctl(net, "net/ipv4/route", tbl);
3015 	if (!net->ipv4.route_hdr)
3016 		goto err_reg;
3017 	return 0;
3018 
3019 err_reg:
3020 	if (tbl != ipv4_route_flush_table)
3021 		kfree(tbl);
3022 err_dup:
3023 	return -ENOMEM;
3024 }
3025 
3026 static __net_exit void sysctl_route_net_exit(struct net *net)
3027 {
3028 	struct ctl_table *tbl;
3029 
3030 	tbl = net->ipv4.route_hdr->ctl_table_arg;
3031 	unregister_net_sysctl_table(net->ipv4.route_hdr);
3032 	BUG_ON(tbl == ipv4_route_flush_table);
3033 	kfree(tbl);
3034 }
3035 
3036 static __net_initdata struct pernet_operations sysctl_route_ops = {
3037 	.init = sysctl_route_net_init,
3038 	.exit = sysctl_route_net_exit,
3039 };
3040 #endif
3041 
3042 static __net_init int rt_genid_init(struct net *net)
3043 {
3044 	atomic_set(&net->ipv4.rt_genid, 0);
3045 	atomic_set(&net->fnhe_genid, 0);
3046 	atomic_set(&net->ipv4.dev_addr_genid, get_random_int());
3047 	return 0;
3048 }
3049 
3050 static __net_initdata struct pernet_operations rt_genid_ops = {
3051 	.init = rt_genid_init,
3052 };
3053 
3054 static int __net_init ipv4_inetpeer_init(struct net *net)
3055 {
3056 	struct inet_peer_base *bp = kmalloc(sizeof(*bp), GFP_KERNEL);
3057 
3058 	if (!bp)
3059 		return -ENOMEM;
3060 	inet_peer_base_init(bp);
3061 	net->ipv4.peers = bp;
3062 	return 0;
3063 }
3064 
3065 static void __net_exit ipv4_inetpeer_exit(struct net *net)
3066 {
3067 	struct inet_peer_base *bp = net->ipv4.peers;
3068 
3069 	net->ipv4.peers = NULL;
3070 	inetpeer_invalidate_tree(bp);
3071 	kfree(bp);
3072 }
3073 
3074 static __net_initdata struct pernet_operations ipv4_inetpeer_ops = {
3075 	.init	=	ipv4_inetpeer_init,
3076 	.exit	=	ipv4_inetpeer_exit,
3077 };
3078 
3079 #ifdef CONFIG_IP_ROUTE_CLASSID
3080 struct ip_rt_acct __percpu *ip_rt_acct __read_mostly;
3081 #endif /* CONFIG_IP_ROUTE_CLASSID */
3082 
3083 int __init ip_rt_init(void)
3084 {
3085 	int cpu;
3086 
3087 	ip_idents = kmalloc(IP_IDENTS_SZ * sizeof(*ip_idents), GFP_KERNEL);
3088 	if (!ip_idents)
3089 		panic("IP: failed to allocate ip_idents\n");
3090 
3091 	prandom_bytes(ip_idents, IP_IDENTS_SZ * sizeof(*ip_idents));
3092 
3093 	ip_tstamps = kcalloc(IP_IDENTS_SZ, sizeof(*ip_tstamps), GFP_KERNEL);
3094 	if (!ip_tstamps)
3095 		panic("IP: failed to allocate ip_tstamps\n");
3096 
3097 	for_each_possible_cpu(cpu) {
3098 		struct uncached_list *ul = &per_cpu(rt_uncached_list, cpu);
3099 
3100 		INIT_LIST_HEAD(&ul->head);
3101 		spin_lock_init(&ul->lock);
3102 	}
3103 #ifdef CONFIG_IP_ROUTE_CLASSID
3104 	ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct));
3105 	if (!ip_rt_acct)
3106 		panic("IP: failed to allocate ip_rt_acct\n");
3107 #endif
3108 
3109 	ipv4_dst_ops.kmem_cachep =
3110 		kmem_cache_create("ip_dst_cache", sizeof(struct rtable), 0,
3111 				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
3112 
3113 	ipv4_dst_blackhole_ops.kmem_cachep = ipv4_dst_ops.kmem_cachep;
3114 
3115 	if (dst_entries_init(&ipv4_dst_ops) < 0)
3116 		panic("IP: failed to allocate ipv4_dst_ops counter\n");
3117 
3118 	if (dst_entries_init(&ipv4_dst_blackhole_ops) < 0)
3119 		panic("IP: failed to allocate ipv4_dst_blackhole_ops counter\n");
3120 
3121 	ipv4_dst_ops.gc_thresh = ~0;
3122 	ip_rt_max_size = INT_MAX;
3123 
3124 	devinet_init();
3125 	ip_fib_init();
3126 
3127 	if (ip_rt_proc_init())
3128 		pr_err("Unable to create route proc files\n");
3129 #ifdef CONFIG_XFRM
3130 	xfrm_init();
3131 	xfrm4_init();
3132 #endif
3133 	rtnl_register(PF_INET, RTM_GETROUTE, inet_rtm_getroute, NULL,
3134 		      RTNL_FLAG_DOIT_UNLOCKED);
3135 
3136 #ifdef CONFIG_SYSCTL
3137 	register_pernet_subsys(&sysctl_route_ops);
3138 #endif
3139 	register_pernet_subsys(&rt_genid_ops);
3140 	register_pernet_subsys(&ipv4_inetpeer_ops);
3141 	return 0;
3142 }
3143 
3144 #ifdef CONFIG_SYSCTL
3145 /*
3146  * We really need to sanitize the damn ipv4 init order, then all
3147  * this nonsense will go away.
3148  */
3149 void __init ip_static_sysctl_init(void)
3150 {
3151 	register_net_sysctl(&init_net, "net/ipv4/route", ipv4_route_table);
3152 }
3153 #endif
3154