xref: /openbmc/linux/net/xfrm/xfrm_state.c (revision a1e58bbd)
1 /*
2  * xfrm_state.c
3  *
4  * Changes:
5  *	Mitsuru KANDA @USAGI
6  * 	Kazunori MIYAZAWA @USAGI
7  * 	Kunihiro Ishiguro <kunihiro@ipinfusion.com>
8  * 		IPv6 support
9  * 	YOSHIFUJI Hideaki @USAGI
10  * 		Split up af-specific functions
11  *	Derek Atkins <derek@ihtfp.com>
12  *		Add UDP Encapsulation
13  *
14  */
15 
16 #include <linux/workqueue.h>
17 #include <net/xfrm.h>
18 #include <linux/pfkeyv2.h>
19 #include <linux/ipsec.h>
20 #include <linux/module.h>
21 #include <linux/cache.h>
22 #include <linux/audit.h>
23 #include <asm/uaccess.h>
24 
25 #include "xfrm_hash.h"
26 
27 struct sock *xfrm_nl;
28 EXPORT_SYMBOL(xfrm_nl);
29 
30 u32 sysctl_xfrm_aevent_etime __read_mostly = XFRM_AE_ETIME;
31 EXPORT_SYMBOL(sysctl_xfrm_aevent_etime);
32 
33 u32 sysctl_xfrm_aevent_rseqth __read_mostly = XFRM_AE_SEQT_SIZE;
34 EXPORT_SYMBOL(sysctl_xfrm_aevent_rseqth);
35 
36 u32 sysctl_xfrm_acq_expires __read_mostly = 30;
37 
38 /* Each xfrm_state may be linked to two tables:
39 
40    1. Hash table by (spi,daddr,ah/esp) to find SA by SPI. (input,ctl)
41    2. Hash table by (daddr,family,reqid) to find what SAs exist for given
42       destination/tunnel endpoint. (output)
43  */
44 
45 static DEFINE_SPINLOCK(xfrm_state_lock);
46 
47 /* Hash table to find appropriate SA towards given target (endpoint
48  * of tunnel or destination of transport mode) allowed by selector.
49  *
50  * Main use is finding SA after policy selected tunnel or transport mode.
51  * Also, it can be used by ah/esp icmp error handler to find offending SA.
52  */
53 static struct hlist_head *xfrm_state_bydst __read_mostly;
54 static struct hlist_head *xfrm_state_bysrc __read_mostly;
55 static struct hlist_head *xfrm_state_byspi __read_mostly;
56 static unsigned int xfrm_state_hmask __read_mostly;
57 static unsigned int xfrm_state_hashmax __read_mostly = 1 * 1024 * 1024;
58 static unsigned int xfrm_state_num;
59 static unsigned int xfrm_state_genid;
60 
61 static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
62 static void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo);
63 
64 #ifdef CONFIG_AUDITSYSCALL
65 static void xfrm_audit_state_replay(struct xfrm_state *x,
66 				    struct sk_buff *skb, __be32 net_seq);
67 #else
68 #define xfrm_audit_state_replay(x, s, sq)	do { ; } while (0)
69 #endif /* CONFIG_AUDITSYSCALL */
70 
71 static inline unsigned int xfrm_dst_hash(xfrm_address_t *daddr,
72 					 xfrm_address_t *saddr,
73 					 u32 reqid,
74 					 unsigned short family)
75 {
76 	return __xfrm_dst_hash(daddr, saddr, reqid, family, xfrm_state_hmask);
77 }
78 
79 static inline unsigned int xfrm_src_hash(xfrm_address_t *daddr,
80 					 xfrm_address_t *saddr,
81 					 unsigned short family)
82 {
83 	return __xfrm_src_hash(daddr, saddr, family, xfrm_state_hmask);
84 }
85 
86 static inline unsigned int
87 xfrm_spi_hash(xfrm_address_t *daddr, __be32 spi, u8 proto, unsigned short family)
88 {
89 	return __xfrm_spi_hash(daddr, spi, proto, family, xfrm_state_hmask);
90 }
91 
92 static void xfrm_hash_transfer(struct hlist_head *list,
93 			       struct hlist_head *ndsttable,
94 			       struct hlist_head *nsrctable,
95 			       struct hlist_head *nspitable,
96 			       unsigned int nhashmask)
97 {
98 	struct hlist_node *entry, *tmp;
99 	struct xfrm_state *x;
100 
101 	hlist_for_each_entry_safe(x, entry, tmp, list, bydst) {
102 		unsigned int h;
103 
104 		h = __xfrm_dst_hash(&x->id.daddr, &x->props.saddr,
105 				    x->props.reqid, x->props.family,
106 				    nhashmask);
107 		hlist_add_head(&x->bydst, ndsttable+h);
108 
109 		h = __xfrm_src_hash(&x->id.daddr, &x->props.saddr,
110 				    x->props.family,
111 				    nhashmask);
112 		hlist_add_head(&x->bysrc, nsrctable+h);
113 
114 		if (x->id.spi) {
115 			h = __xfrm_spi_hash(&x->id.daddr, x->id.spi,
116 					    x->id.proto, x->props.family,
117 					    nhashmask);
118 			hlist_add_head(&x->byspi, nspitable+h);
119 		}
120 	}
121 }
122 
123 static unsigned long xfrm_hash_new_size(void)
124 {
125 	return ((xfrm_state_hmask + 1) << 1) *
126 		sizeof(struct hlist_head);
127 }
128 
129 static DEFINE_MUTEX(hash_resize_mutex);
130 
131 static void xfrm_hash_resize(struct work_struct *__unused)
132 {
133 	struct hlist_head *ndst, *nsrc, *nspi, *odst, *osrc, *ospi;
134 	unsigned long nsize, osize;
135 	unsigned int nhashmask, ohashmask;
136 	int i;
137 
138 	mutex_lock(&hash_resize_mutex);
139 
140 	nsize = xfrm_hash_new_size();
141 	ndst = xfrm_hash_alloc(nsize);
142 	if (!ndst)
143 		goto out_unlock;
144 	nsrc = xfrm_hash_alloc(nsize);
145 	if (!nsrc) {
146 		xfrm_hash_free(ndst, nsize);
147 		goto out_unlock;
148 	}
149 	nspi = xfrm_hash_alloc(nsize);
150 	if (!nspi) {
151 		xfrm_hash_free(ndst, nsize);
152 		xfrm_hash_free(nsrc, nsize);
153 		goto out_unlock;
154 	}
155 
156 	spin_lock_bh(&xfrm_state_lock);
157 
158 	nhashmask = (nsize / sizeof(struct hlist_head)) - 1U;
159 	for (i = xfrm_state_hmask; i >= 0; i--)
160 		xfrm_hash_transfer(xfrm_state_bydst+i, ndst, nsrc, nspi,
161 				   nhashmask);
162 
163 	odst = xfrm_state_bydst;
164 	osrc = xfrm_state_bysrc;
165 	ospi = xfrm_state_byspi;
166 	ohashmask = xfrm_state_hmask;
167 
168 	xfrm_state_bydst = ndst;
169 	xfrm_state_bysrc = nsrc;
170 	xfrm_state_byspi = nspi;
171 	xfrm_state_hmask = nhashmask;
172 
173 	spin_unlock_bh(&xfrm_state_lock);
174 
175 	osize = (ohashmask + 1) * sizeof(struct hlist_head);
176 	xfrm_hash_free(odst, osize);
177 	xfrm_hash_free(osrc, osize);
178 	xfrm_hash_free(ospi, osize);
179 
180 out_unlock:
181 	mutex_unlock(&hash_resize_mutex);
182 }
183 
184 static DECLARE_WORK(xfrm_hash_work, xfrm_hash_resize);
185 
186 DECLARE_WAIT_QUEUE_HEAD(km_waitq);
187 EXPORT_SYMBOL(km_waitq);
188 
189 static DEFINE_RWLOCK(xfrm_state_afinfo_lock);
190 static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO];
191 
192 static struct work_struct xfrm_state_gc_work;
193 static HLIST_HEAD(xfrm_state_gc_list);
194 static DEFINE_SPINLOCK(xfrm_state_gc_lock);
195 
196 int __xfrm_state_delete(struct xfrm_state *x);
197 
198 int km_query(struct xfrm_state *x, struct xfrm_tmpl *t, struct xfrm_policy *pol);
199 void km_state_expired(struct xfrm_state *x, int hard, u32 pid);
200 
201 static struct xfrm_state_afinfo *xfrm_state_lock_afinfo(unsigned int family)
202 {
203 	struct xfrm_state_afinfo *afinfo;
204 	if (unlikely(family >= NPROTO))
205 		return NULL;
206 	write_lock_bh(&xfrm_state_afinfo_lock);
207 	afinfo = xfrm_state_afinfo[family];
208 	if (unlikely(!afinfo))
209 		write_unlock_bh(&xfrm_state_afinfo_lock);
210 	return afinfo;
211 }
212 
213 static void xfrm_state_unlock_afinfo(struct xfrm_state_afinfo *afinfo)
214 	__releases(xfrm_state_afinfo_lock)
215 {
216 	write_unlock_bh(&xfrm_state_afinfo_lock);
217 }
218 
219 int xfrm_register_type(const struct xfrm_type *type, unsigned short family)
220 {
221 	struct xfrm_state_afinfo *afinfo = xfrm_state_lock_afinfo(family);
222 	const struct xfrm_type **typemap;
223 	int err = 0;
224 
225 	if (unlikely(afinfo == NULL))
226 		return -EAFNOSUPPORT;
227 	typemap = afinfo->type_map;
228 
229 	if (likely(typemap[type->proto] == NULL))
230 		typemap[type->proto] = type;
231 	else
232 		err = -EEXIST;
233 	xfrm_state_unlock_afinfo(afinfo);
234 	return err;
235 }
236 EXPORT_SYMBOL(xfrm_register_type);
237 
238 int xfrm_unregister_type(const struct xfrm_type *type, unsigned short family)
239 {
240 	struct xfrm_state_afinfo *afinfo = xfrm_state_lock_afinfo(family);
241 	const struct xfrm_type **typemap;
242 	int err = 0;
243 
244 	if (unlikely(afinfo == NULL))
245 		return -EAFNOSUPPORT;
246 	typemap = afinfo->type_map;
247 
248 	if (unlikely(typemap[type->proto] != type))
249 		err = -ENOENT;
250 	else
251 		typemap[type->proto] = NULL;
252 	xfrm_state_unlock_afinfo(afinfo);
253 	return err;
254 }
255 EXPORT_SYMBOL(xfrm_unregister_type);
256 
257 static const struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family)
258 {
259 	struct xfrm_state_afinfo *afinfo;
260 	const struct xfrm_type **typemap;
261 	const struct xfrm_type *type;
262 	int modload_attempted = 0;
263 
264 retry:
265 	afinfo = xfrm_state_get_afinfo(family);
266 	if (unlikely(afinfo == NULL))
267 		return NULL;
268 	typemap = afinfo->type_map;
269 
270 	type = typemap[proto];
271 	if (unlikely(type && !try_module_get(type->owner)))
272 		type = NULL;
273 	if (!type && !modload_attempted) {
274 		xfrm_state_put_afinfo(afinfo);
275 		request_module("xfrm-type-%d-%d", family, proto);
276 		modload_attempted = 1;
277 		goto retry;
278 	}
279 
280 	xfrm_state_put_afinfo(afinfo);
281 	return type;
282 }
283 
284 static void xfrm_put_type(const struct xfrm_type *type)
285 {
286 	module_put(type->owner);
287 }
288 
289 int xfrm_register_mode(struct xfrm_mode *mode, int family)
290 {
291 	struct xfrm_state_afinfo *afinfo;
292 	struct xfrm_mode **modemap;
293 	int err;
294 
295 	if (unlikely(mode->encap >= XFRM_MODE_MAX))
296 		return -EINVAL;
297 
298 	afinfo = xfrm_state_lock_afinfo(family);
299 	if (unlikely(afinfo == NULL))
300 		return -EAFNOSUPPORT;
301 
302 	err = -EEXIST;
303 	modemap = afinfo->mode_map;
304 	if (modemap[mode->encap])
305 		goto out;
306 
307 	err = -ENOENT;
308 	if (!try_module_get(afinfo->owner))
309 		goto out;
310 
311 	mode->afinfo = afinfo;
312 	modemap[mode->encap] = mode;
313 	err = 0;
314 
315 out:
316 	xfrm_state_unlock_afinfo(afinfo);
317 	return err;
318 }
319 EXPORT_SYMBOL(xfrm_register_mode);
320 
321 int xfrm_unregister_mode(struct xfrm_mode *mode, int family)
322 {
323 	struct xfrm_state_afinfo *afinfo;
324 	struct xfrm_mode **modemap;
325 	int err;
326 
327 	if (unlikely(mode->encap >= XFRM_MODE_MAX))
328 		return -EINVAL;
329 
330 	afinfo = xfrm_state_lock_afinfo(family);
331 	if (unlikely(afinfo == NULL))
332 		return -EAFNOSUPPORT;
333 
334 	err = -ENOENT;
335 	modemap = afinfo->mode_map;
336 	if (likely(modemap[mode->encap] == mode)) {
337 		modemap[mode->encap] = NULL;
338 		module_put(mode->afinfo->owner);
339 		err = 0;
340 	}
341 
342 	xfrm_state_unlock_afinfo(afinfo);
343 	return err;
344 }
345 EXPORT_SYMBOL(xfrm_unregister_mode);
346 
347 static struct xfrm_mode *xfrm_get_mode(unsigned int encap, int family)
348 {
349 	struct xfrm_state_afinfo *afinfo;
350 	struct xfrm_mode *mode;
351 	int modload_attempted = 0;
352 
353 	if (unlikely(encap >= XFRM_MODE_MAX))
354 		return NULL;
355 
356 retry:
357 	afinfo = xfrm_state_get_afinfo(family);
358 	if (unlikely(afinfo == NULL))
359 		return NULL;
360 
361 	mode = afinfo->mode_map[encap];
362 	if (unlikely(mode && !try_module_get(mode->owner)))
363 		mode = NULL;
364 	if (!mode && !modload_attempted) {
365 		xfrm_state_put_afinfo(afinfo);
366 		request_module("xfrm-mode-%d-%d", family, encap);
367 		modload_attempted = 1;
368 		goto retry;
369 	}
370 
371 	xfrm_state_put_afinfo(afinfo);
372 	return mode;
373 }
374 
375 static void xfrm_put_mode(struct xfrm_mode *mode)
376 {
377 	module_put(mode->owner);
378 }
379 
380 static void xfrm_state_gc_destroy(struct xfrm_state *x)
381 {
382 	del_timer_sync(&x->timer);
383 	del_timer_sync(&x->rtimer);
384 	kfree(x->aalg);
385 	kfree(x->ealg);
386 	kfree(x->calg);
387 	kfree(x->encap);
388 	kfree(x->coaddr);
389 	if (x->inner_mode)
390 		xfrm_put_mode(x->inner_mode);
391 	if (x->inner_mode_iaf)
392 		xfrm_put_mode(x->inner_mode_iaf);
393 	if (x->outer_mode)
394 		xfrm_put_mode(x->outer_mode);
395 	if (x->type) {
396 		x->type->destructor(x);
397 		xfrm_put_type(x->type);
398 	}
399 	security_xfrm_state_free(x);
400 	kfree(x);
401 }
402 
403 static void xfrm_state_gc_task(struct work_struct *data)
404 {
405 	struct xfrm_state *x;
406 	struct hlist_node *entry, *tmp;
407 	struct hlist_head gc_list;
408 
409 	spin_lock_bh(&xfrm_state_gc_lock);
410 	gc_list.first = xfrm_state_gc_list.first;
411 	INIT_HLIST_HEAD(&xfrm_state_gc_list);
412 	spin_unlock_bh(&xfrm_state_gc_lock);
413 
414 	hlist_for_each_entry_safe(x, entry, tmp, &gc_list, bydst)
415 		xfrm_state_gc_destroy(x);
416 
417 	wake_up(&km_waitq);
418 }
419 
420 static inline unsigned long make_jiffies(long secs)
421 {
422 	if (secs >= (MAX_SCHEDULE_TIMEOUT-1)/HZ)
423 		return MAX_SCHEDULE_TIMEOUT-1;
424 	else
425 		return secs*HZ;
426 }
427 
428 static void xfrm_timer_handler(unsigned long data)
429 {
430 	struct xfrm_state *x = (struct xfrm_state*)data;
431 	unsigned long now = get_seconds();
432 	long next = LONG_MAX;
433 	int warn = 0;
434 	int err = 0;
435 
436 	spin_lock(&x->lock);
437 	if (x->km.state == XFRM_STATE_DEAD)
438 		goto out;
439 	if (x->km.state == XFRM_STATE_EXPIRED)
440 		goto expired;
441 	if (x->lft.hard_add_expires_seconds) {
442 		long tmo = x->lft.hard_add_expires_seconds +
443 			x->curlft.add_time - now;
444 		if (tmo <= 0)
445 			goto expired;
446 		if (tmo < next)
447 			next = tmo;
448 	}
449 	if (x->lft.hard_use_expires_seconds) {
450 		long tmo = x->lft.hard_use_expires_seconds +
451 			(x->curlft.use_time ? : now) - now;
452 		if (tmo <= 0)
453 			goto expired;
454 		if (tmo < next)
455 			next = tmo;
456 	}
457 	if (x->km.dying)
458 		goto resched;
459 	if (x->lft.soft_add_expires_seconds) {
460 		long tmo = x->lft.soft_add_expires_seconds +
461 			x->curlft.add_time - now;
462 		if (tmo <= 0)
463 			warn = 1;
464 		else if (tmo < next)
465 			next = tmo;
466 	}
467 	if (x->lft.soft_use_expires_seconds) {
468 		long tmo = x->lft.soft_use_expires_seconds +
469 			(x->curlft.use_time ? : now) - now;
470 		if (tmo <= 0)
471 			warn = 1;
472 		else if (tmo < next)
473 			next = tmo;
474 	}
475 
476 	x->km.dying = warn;
477 	if (warn)
478 		km_state_expired(x, 0, 0);
479 resched:
480 	if (next != LONG_MAX)
481 		mod_timer(&x->timer, jiffies + make_jiffies(next));
482 
483 	goto out;
484 
485 expired:
486 	if (x->km.state == XFRM_STATE_ACQ && x->id.spi == 0) {
487 		x->km.state = XFRM_STATE_EXPIRED;
488 		wake_up(&km_waitq);
489 		next = 2;
490 		goto resched;
491 	}
492 
493 	err = __xfrm_state_delete(x);
494 	if (!err && x->id.spi)
495 		km_state_expired(x, 1, 0);
496 
497 	xfrm_audit_state_delete(x, err ? 0 : 1,
498 				audit_get_loginuid(current), 0);
499 
500 out:
501 	spin_unlock(&x->lock);
502 }
503 
504 static void xfrm_replay_timer_handler(unsigned long data);
505 
506 struct xfrm_state *xfrm_state_alloc(void)
507 {
508 	struct xfrm_state *x;
509 
510 	x = kzalloc(sizeof(struct xfrm_state), GFP_ATOMIC);
511 
512 	if (x) {
513 		atomic_set(&x->refcnt, 1);
514 		atomic_set(&x->tunnel_users, 0);
515 		INIT_HLIST_NODE(&x->bydst);
516 		INIT_HLIST_NODE(&x->bysrc);
517 		INIT_HLIST_NODE(&x->byspi);
518 		setup_timer(&x->timer, xfrm_timer_handler, (unsigned long)x);
519 		setup_timer(&x->rtimer, xfrm_replay_timer_handler,
520 				(unsigned long)x);
521 		x->curlft.add_time = get_seconds();
522 		x->lft.soft_byte_limit = XFRM_INF;
523 		x->lft.soft_packet_limit = XFRM_INF;
524 		x->lft.hard_byte_limit = XFRM_INF;
525 		x->lft.hard_packet_limit = XFRM_INF;
526 		x->replay_maxage = 0;
527 		x->replay_maxdiff = 0;
528 		x->inner_mode = NULL;
529 		x->inner_mode_iaf = NULL;
530 		spin_lock_init(&x->lock);
531 	}
532 	return x;
533 }
534 EXPORT_SYMBOL(xfrm_state_alloc);
535 
536 void __xfrm_state_destroy(struct xfrm_state *x)
537 {
538 	BUG_TRAP(x->km.state == XFRM_STATE_DEAD);
539 
540 	spin_lock_bh(&xfrm_state_gc_lock);
541 	hlist_add_head(&x->bydst, &xfrm_state_gc_list);
542 	spin_unlock_bh(&xfrm_state_gc_lock);
543 	schedule_work(&xfrm_state_gc_work);
544 }
545 EXPORT_SYMBOL(__xfrm_state_destroy);
546 
547 int __xfrm_state_delete(struct xfrm_state *x)
548 {
549 	int err = -ESRCH;
550 
551 	if (x->km.state != XFRM_STATE_DEAD) {
552 		x->km.state = XFRM_STATE_DEAD;
553 		spin_lock(&xfrm_state_lock);
554 		hlist_del(&x->bydst);
555 		hlist_del(&x->bysrc);
556 		if (x->id.spi)
557 			hlist_del(&x->byspi);
558 		xfrm_state_num--;
559 		spin_unlock(&xfrm_state_lock);
560 
561 		/* All xfrm_state objects are created by xfrm_state_alloc.
562 		 * The xfrm_state_alloc call gives a reference, and that
563 		 * is what we are dropping here.
564 		 */
565 		xfrm_state_put(x);
566 		err = 0;
567 	}
568 
569 	return err;
570 }
571 EXPORT_SYMBOL(__xfrm_state_delete);
572 
573 int xfrm_state_delete(struct xfrm_state *x)
574 {
575 	int err;
576 
577 	spin_lock_bh(&x->lock);
578 	err = __xfrm_state_delete(x);
579 	spin_unlock_bh(&x->lock);
580 
581 	return err;
582 }
583 EXPORT_SYMBOL(xfrm_state_delete);
584 
585 #ifdef CONFIG_SECURITY_NETWORK_XFRM
586 static inline int
587 xfrm_state_flush_secctx_check(u8 proto, struct xfrm_audit *audit_info)
588 {
589 	int i, err = 0;
590 
591 	for (i = 0; i <= xfrm_state_hmask; i++) {
592 		struct hlist_node *entry;
593 		struct xfrm_state *x;
594 
595 		hlist_for_each_entry(x, entry, xfrm_state_bydst+i, bydst) {
596 			if (xfrm_id_proto_match(x->id.proto, proto) &&
597 			   (err = security_xfrm_state_delete(x)) != 0) {
598 				xfrm_audit_state_delete(x, 0,
599 							audit_info->loginuid,
600 							audit_info->secid);
601 				return err;
602 			}
603 		}
604 	}
605 
606 	return err;
607 }
608 #else
609 static inline int
610 xfrm_state_flush_secctx_check(u8 proto, struct xfrm_audit *audit_info)
611 {
612 	return 0;
613 }
614 #endif
615 
616 int xfrm_state_flush(u8 proto, struct xfrm_audit *audit_info)
617 {
618 	int i, err = 0;
619 
620 	spin_lock_bh(&xfrm_state_lock);
621 	err = xfrm_state_flush_secctx_check(proto, audit_info);
622 	if (err)
623 		goto out;
624 
625 	for (i = 0; i <= xfrm_state_hmask; i++) {
626 		struct hlist_node *entry;
627 		struct xfrm_state *x;
628 restart:
629 		hlist_for_each_entry(x, entry, xfrm_state_bydst+i, bydst) {
630 			if (!xfrm_state_kern(x) &&
631 			    xfrm_id_proto_match(x->id.proto, proto)) {
632 				xfrm_state_hold(x);
633 				spin_unlock_bh(&xfrm_state_lock);
634 
635 				err = xfrm_state_delete(x);
636 				xfrm_audit_state_delete(x, err ? 0 : 1,
637 							audit_info->loginuid,
638 							audit_info->secid);
639 				xfrm_state_put(x);
640 
641 				spin_lock_bh(&xfrm_state_lock);
642 				goto restart;
643 			}
644 		}
645 	}
646 	err = 0;
647 
648 out:
649 	spin_unlock_bh(&xfrm_state_lock);
650 	wake_up(&km_waitq);
651 	return err;
652 }
653 EXPORT_SYMBOL(xfrm_state_flush);
654 
655 void xfrm_sad_getinfo(struct xfrmk_sadinfo *si)
656 {
657 	spin_lock_bh(&xfrm_state_lock);
658 	si->sadcnt = xfrm_state_num;
659 	si->sadhcnt = xfrm_state_hmask;
660 	si->sadhmcnt = xfrm_state_hashmax;
661 	spin_unlock_bh(&xfrm_state_lock);
662 }
663 EXPORT_SYMBOL(xfrm_sad_getinfo);
664 
665 static int
666 xfrm_init_tempsel(struct xfrm_state *x, struct flowi *fl,
667 		  struct xfrm_tmpl *tmpl,
668 		  xfrm_address_t *daddr, xfrm_address_t *saddr,
669 		  unsigned short family)
670 {
671 	struct xfrm_state_afinfo *afinfo = xfrm_state_get_afinfo(family);
672 	if (!afinfo)
673 		return -1;
674 	afinfo->init_tempsel(x, fl, tmpl, daddr, saddr);
675 	xfrm_state_put_afinfo(afinfo);
676 	return 0;
677 }
678 
679 static struct xfrm_state *__xfrm_state_lookup(xfrm_address_t *daddr, __be32 spi, u8 proto, unsigned short family)
680 {
681 	unsigned int h = xfrm_spi_hash(daddr, spi, proto, family);
682 	struct xfrm_state *x;
683 	struct hlist_node *entry;
684 
685 	hlist_for_each_entry(x, entry, xfrm_state_byspi+h, byspi) {
686 		if (x->props.family != family ||
687 		    x->id.spi       != spi ||
688 		    x->id.proto     != proto)
689 			continue;
690 
691 		switch (family) {
692 		case AF_INET:
693 			if (x->id.daddr.a4 != daddr->a4)
694 				continue;
695 			break;
696 		case AF_INET6:
697 			if (!ipv6_addr_equal((struct in6_addr *)daddr,
698 					     (struct in6_addr *)
699 					     x->id.daddr.a6))
700 				continue;
701 			break;
702 		}
703 
704 		xfrm_state_hold(x);
705 		return x;
706 	}
707 
708 	return NULL;
709 }
710 
711 static struct xfrm_state *__xfrm_state_lookup_byaddr(xfrm_address_t *daddr, xfrm_address_t *saddr, u8 proto, unsigned short family)
712 {
713 	unsigned int h = xfrm_src_hash(daddr, saddr, family);
714 	struct xfrm_state *x;
715 	struct hlist_node *entry;
716 
717 	hlist_for_each_entry(x, entry, xfrm_state_bysrc+h, bysrc) {
718 		if (x->props.family != family ||
719 		    x->id.proto     != proto)
720 			continue;
721 
722 		switch (family) {
723 		case AF_INET:
724 			if (x->id.daddr.a4 != daddr->a4 ||
725 			    x->props.saddr.a4 != saddr->a4)
726 				continue;
727 			break;
728 		case AF_INET6:
729 			if (!ipv6_addr_equal((struct in6_addr *)daddr,
730 					     (struct in6_addr *)
731 					     x->id.daddr.a6) ||
732 			    !ipv6_addr_equal((struct in6_addr *)saddr,
733 					     (struct in6_addr *)
734 					     x->props.saddr.a6))
735 				continue;
736 			break;
737 		}
738 
739 		xfrm_state_hold(x);
740 		return x;
741 	}
742 
743 	return NULL;
744 }
745 
746 static inline struct xfrm_state *
747 __xfrm_state_locate(struct xfrm_state *x, int use_spi, int family)
748 {
749 	if (use_spi)
750 		return __xfrm_state_lookup(&x->id.daddr, x->id.spi,
751 					   x->id.proto, family);
752 	else
753 		return __xfrm_state_lookup_byaddr(&x->id.daddr,
754 						  &x->props.saddr,
755 						  x->id.proto, family);
756 }
757 
758 static void xfrm_hash_grow_check(int have_hash_collision)
759 {
760 	if (have_hash_collision &&
761 	    (xfrm_state_hmask + 1) < xfrm_state_hashmax &&
762 	    xfrm_state_num > xfrm_state_hmask)
763 		schedule_work(&xfrm_hash_work);
764 }
765 
766 struct xfrm_state *
767 xfrm_state_find(xfrm_address_t *daddr, xfrm_address_t *saddr,
768 		struct flowi *fl, struct xfrm_tmpl *tmpl,
769 		struct xfrm_policy *pol, int *err,
770 		unsigned short family)
771 {
772 	unsigned int h;
773 	struct hlist_node *entry;
774 	struct xfrm_state *x, *x0;
775 	int acquire_in_progress = 0;
776 	int error = 0;
777 	struct xfrm_state *best = NULL;
778 
779 	spin_lock_bh(&xfrm_state_lock);
780 	h = xfrm_dst_hash(daddr, saddr, tmpl->reqid, family);
781 	hlist_for_each_entry(x, entry, xfrm_state_bydst+h, bydst) {
782 		if (x->props.family == family &&
783 		    x->props.reqid == tmpl->reqid &&
784 		    !(x->props.flags & XFRM_STATE_WILDRECV) &&
785 		    xfrm_state_addr_check(x, daddr, saddr, family) &&
786 		    tmpl->mode == x->props.mode &&
787 		    tmpl->id.proto == x->id.proto &&
788 		    (tmpl->id.spi == x->id.spi || !tmpl->id.spi)) {
789 			/* Resolution logic:
790 			   1. There is a valid state with matching selector.
791 			      Done.
792 			   2. Valid state with inappropriate selector. Skip.
793 
794 			   Entering area of "sysdeps".
795 
796 			   3. If state is not valid, selector is temporary,
797 			      it selects only session which triggered
798 			      previous resolution. Key manager will do
799 			      something to install a state with proper
800 			      selector.
801 			 */
802 			if (x->km.state == XFRM_STATE_VALID) {
803 				if ((x->sel.family && !xfrm_selector_match(&x->sel, fl, x->sel.family)) ||
804 				    !security_xfrm_state_pol_flow_match(x, pol, fl))
805 					continue;
806 				if (!best ||
807 				    best->km.dying > x->km.dying ||
808 				    (best->km.dying == x->km.dying &&
809 				     best->curlft.add_time < x->curlft.add_time))
810 					best = x;
811 			} else if (x->km.state == XFRM_STATE_ACQ) {
812 				acquire_in_progress = 1;
813 			} else if (x->km.state == XFRM_STATE_ERROR ||
814 				   x->km.state == XFRM_STATE_EXPIRED) {
815 				if (xfrm_selector_match(&x->sel, fl, x->sel.family) &&
816 				    security_xfrm_state_pol_flow_match(x, pol, fl))
817 					error = -ESRCH;
818 			}
819 		}
820 	}
821 
822 	x = best;
823 	if (!x && !error && !acquire_in_progress) {
824 		if (tmpl->id.spi &&
825 		    (x0 = __xfrm_state_lookup(daddr, tmpl->id.spi,
826 					      tmpl->id.proto, family)) != NULL) {
827 			xfrm_state_put(x0);
828 			error = -EEXIST;
829 			goto out;
830 		}
831 		x = xfrm_state_alloc();
832 		if (x == NULL) {
833 			error = -ENOMEM;
834 			goto out;
835 		}
836 		/* Initialize temporary selector matching only
837 		 * to current session. */
838 		xfrm_init_tempsel(x, fl, tmpl, daddr, saddr, family);
839 
840 		error = security_xfrm_state_alloc_acquire(x, pol->security, fl->secid);
841 		if (error) {
842 			x->km.state = XFRM_STATE_DEAD;
843 			xfrm_state_put(x);
844 			x = NULL;
845 			goto out;
846 		}
847 
848 		if (km_query(x, tmpl, pol) == 0) {
849 			x->km.state = XFRM_STATE_ACQ;
850 			hlist_add_head(&x->bydst, xfrm_state_bydst+h);
851 			h = xfrm_src_hash(daddr, saddr, family);
852 			hlist_add_head(&x->bysrc, xfrm_state_bysrc+h);
853 			if (x->id.spi) {
854 				h = xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto, family);
855 				hlist_add_head(&x->byspi, xfrm_state_byspi+h);
856 			}
857 			x->lft.hard_add_expires_seconds = sysctl_xfrm_acq_expires;
858 			x->timer.expires = jiffies + sysctl_xfrm_acq_expires*HZ;
859 			add_timer(&x->timer);
860 			xfrm_state_num++;
861 			xfrm_hash_grow_check(x->bydst.next != NULL);
862 		} else {
863 			x->km.state = XFRM_STATE_DEAD;
864 			xfrm_state_put(x);
865 			x = NULL;
866 			error = -ESRCH;
867 		}
868 	}
869 out:
870 	if (x)
871 		xfrm_state_hold(x);
872 	else
873 		*err = acquire_in_progress ? -EAGAIN : error;
874 	spin_unlock_bh(&xfrm_state_lock);
875 	return x;
876 }
877 
878 struct xfrm_state *
879 xfrm_stateonly_find(xfrm_address_t *daddr, xfrm_address_t *saddr,
880 		    unsigned short family, u8 mode, u8 proto, u32 reqid)
881 {
882 	unsigned int h;
883 	struct xfrm_state *rx = NULL, *x = NULL;
884 	struct hlist_node *entry;
885 
886 	spin_lock(&xfrm_state_lock);
887 	h = xfrm_dst_hash(daddr, saddr, reqid, family);
888 	hlist_for_each_entry(x, entry, xfrm_state_bydst+h, bydst) {
889 		if (x->props.family == family &&
890 		    x->props.reqid == reqid &&
891 		    !(x->props.flags & XFRM_STATE_WILDRECV) &&
892 		    xfrm_state_addr_check(x, daddr, saddr, family) &&
893 		    mode == x->props.mode &&
894 		    proto == x->id.proto &&
895 		    x->km.state == XFRM_STATE_VALID) {
896 			rx = x;
897 			break;
898 		}
899 	}
900 
901 	if (rx)
902 		xfrm_state_hold(rx);
903 	spin_unlock(&xfrm_state_lock);
904 
905 
906 	return rx;
907 }
908 EXPORT_SYMBOL(xfrm_stateonly_find);
909 
910 static void __xfrm_state_insert(struct xfrm_state *x)
911 {
912 	unsigned int h;
913 
914 	x->genid = ++xfrm_state_genid;
915 
916 	h = xfrm_dst_hash(&x->id.daddr, &x->props.saddr,
917 			  x->props.reqid, x->props.family);
918 	hlist_add_head(&x->bydst, xfrm_state_bydst+h);
919 
920 	h = xfrm_src_hash(&x->id.daddr, &x->props.saddr, x->props.family);
921 	hlist_add_head(&x->bysrc, xfrm_state_bysrc+h);
922 
923 	if (x->id.spi) {
924 		h = xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto,
925 				  x->props.family);
926 
927 		hlist_add_head(&x->byspi, xfrm_state_byspi+h);
928 	}
929 
930 	mod_timer(&x->timer, jiffies + HZ);
931 	if (x->replay_maxage)
932 		mod_timer(&x->rtimer, jiffies + x->replay_maxage);
933 
934 	wake_up(&km_waitq);
935 
936 	xfrm_state_num++;
937 
938 	xfrm_hash_grow_check(x->bydst.next != NULL);
939 }
940 
941 /* xfrm_state_lock is held */
942 static void __xfrm_state_bump_genids(struct xfrm_state *xnew)
943 {
944 	unsigned short family = xnew->props.family;
945 	u32 reqid = xnew->props.reqid;
946 	struct xfrm_state *x;
947 	struct hlist_node *entry;
948 	unsigned int h;
949 
950 	h = xfrm_dst_hash(&xnew->id.daddr, &xnew->props.saddr, reqid, family);
951 	hlist_for_each_entry(x, entry, xfrm_state_bydst+h, bydst) {
952 		if (x->props.family	== family &&
953 		    x->props.reqid	== reqid &&
954 		    !xfrm_addr_cmp(&x->id.daddr, &xnew->id.daddr, family) &&
955 		    !xfrm_addr_cmp(&x->props.saddr, &xnew->props.saddr, family))
956 			x->genid = xfrm_state_genid;
957 	}
958 }
959 
960 void xfrm_state_insert(struct xfrm_state *x)
961 {
962 	spin_lock_bh(&xfrm_state_lock);
963 	__xfrm_state_bump_genids(x);
964 	__xfrm_state_insert(x);
965 	spin_unlock_bh(&xfrm_state_lock);
966 }
967 EXPORT_SYMBOL(xfrm_state_insert);
968 
969 /* xfrm_state_lock is held */
970 static struct xfrm_state *__find_acq_core(unsigned short family, u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create)
971 {
972 	unsigned int h = xfrm_dst_hash(daddr, saddr, reqid, family);
973 	struct hlist_node *entry;
974 	struct xfrm_state *x;
975 
976 	hlist_for_each_entry(x, entry, xfrm_state_bydst+h, bydst) {
977 		if (x->props.reqid  != reqid ||
978 		    x->props.mode   != mode ||
979 		    x->props.family != family ||
980 		    x->km.state     != XFRM_STATE_ACQ ||
981 		    x->id.spi       != 0 ||
982 		    x->id.proto	    != proto)
983 			continue;
984 
985 		switch (family) {
986 		case AF_INET:
987 			if (x->id.daddr.a4    != daddr->a4 ||
988 			    x->props.saddr.a4 != saddr->a4)
989 				continue;
990 			break;
991 		case AF_INET6:
992 			if (!ipv6_addr_equal((struct in6_addr *)x->id.daddr.a6,
993 					     (struct in6_addr *)daddr) ||
994 			    !ipv6_addr_equal((struct in6_addr *)
995 					     x->props.saddr.a6,
996 					     (struct in6_addr *)saddr))
997 				continue;
998 			break;
999 		}
1000 
1001 		xfrm_state_hold(x);
1002 		return x;
1003 	}
1004 
1005 	if (!create)
1006 		return NULL;
1007 
1008 	x = xfrm_state_alloc();
1009 	if (likely(x)) {
1010 		switch (family) {
1011 		case AF_INET:
1012 			x->sel.daddr.a4 = daddr->a4;
1013 			x->sel.saddr.a4 = saddr->a4;
1014 			x->sel.prefixlen_d = 32;
1015 			x->sel.prefixlen_s = 32;
1016 			x->props.saddr.a4 = saddr->a4;
1017 			x->id.daddr.a4 = daddr->a4;
1018 			break;
1019 
1020 		case AF_INET6:
1021 			ipv6_addr_copy((struct in6_addr *)x->sel.daddr.a6,
1022 				       (struct in6_addr *)daddr);
1023 			ipv6_addr_copy((struct in6_addr *)x->sel.saddr.a6,
1024 				       (struct in6_addr *)saddr);
1025 			x->sel.prefixlen_d = 128;
1026 			x->sel.prefixlen_s = 128;
1027 			ipv6_addr_copy((struct in6_addr *)x->props.saddr.a6,
1028 				       (struct in6_addr *)saddr);
1029 			ipv6_addr_copy((struct in6_addr *)x->id.daddr.a6,
1030 				       (struct in6_addr *)daddr);
1031 			break;
1032 		}
1033 
1034 		x->km.state = XFRM_STATE_ACQ;
1035 		x->id.proto = proto;
1036 		x->props.family = family;
1037 		x->props.mode = mode;
1038 		x->props.reqid = reqid;
1039 		x->lft.hard_add_expires_seconds = sysctl_xfrm_acq_expires;
1040 		xfrm_state_hold(x);
1041 		x->timer.expires = jiffies + sysctl_xfrm_acq_expires*HZ;
1042 		add_timer(&x->timer);
1043 		hlist_add_head(&x->bydst, xfrm_state_bydst+h);
1044 		h = xfrm_src_hash(daddr, saddr, family);
1045 		hlist_add_head(&x->bysrc, xfrm_state_bysrc+h);
1046 
1047 		xfrm_state_num++;
1048 
1049 		xfrm_hash_grow_check(x->bydst.next != NULL);
1050 	}
1051 
1052 	return x;
1053 }
1054 
1055 static struct xfrm_state *__xfrm_find_acq_byseq(u32 seq);
1056 
1057 int xfrm_state_add(struct xfrm_state *x)
1058 {
1059 	struct xfrm_state *x1;
1060 	int family;
1061 	int err;
1062 	int use_spi = xfrm_id_proto_match(x->id.proto, IPSEC_PROTO_ANY);
1063 
1064 	family = x->props.family;
1065 
1066 	spin_lock_bh(&xfrm_state_lock);
1067 
1068 	x1 = __xfrm_state_locate(x, use_spi, family);
1069 	if (x1) {
1070 		xfrm_state_put(x1);
1071 		x1 = NULL;
1072 		err = -EEXIST;
1073 		goto out;
1074 	}
1075 
1076 	if (use_spi && x->km.seq) {
1077 		x1 = __xfrm_find_acq_byseq(x->km.seq);
1078 		if (x1 && ((x1->id.proto != x->id.proto) ||
1079 		    xfrm_addr_cmp(&x1->id.daddr, &x->id.daddr, family))) {
1080 			xfrm_state_put(x1);
1081 			x1 = NULL;
1082 		}
1083 	}
1084 
1085 	if (use_spi && !x1)
1086 		x1 = __find_acq_core(family, x->props.mode, x->props.reqid,
1087 				     x->id.proto,
1088 				     &x->id.daddr, &x->props.saddr, 0);
1089 
1090 	__xfrm_state_bump_genids(x);
1091 	__xfrm_state_insert(x);
1092 	err = 0;
1093 
1094 out:
1095 	spin_unlock_bh(&xfrm_state_lock);
1096 
1097 	if (x1) {
1098 		xfrm_state_delete(x1);
1099 		xfrm_state_put(x1);
1100 	}
1101 
1102 	return err;
1103 }
1104 EXPORT_SYMBOL(xfrm_state_add);
1105 
1106 #ifdef CONFIG_XFRM_MIGRATE
1107 static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp)
1108 {
1109 	int err = -ENOMEM;
1110 	struct xfrm_state *x = xfrm_state_alloc();
1111 	if (!x)
1112 		goto error;
1113 
1114 	memcpy(&x->id, &orig->id, sizeof(x->id));
1115 	memcpy(&x->sel, &orig->sel, sizeof(x->sel));
1116 	memcpy(&x->lft, &orig->lft, sizeof(x->lft));
1117 	x->props.mode = orig->props.mode;
1118 	x->props.replay_window = orig->props.replay_window;
1119 	x->props.reqid = orig->props.reqid;
1120 	x->props.family = orig->props.family;
1121 	x->props.saddr = orig->props.saddr;
1122 
1123 	if (orig->aalg) {
1124 		x->aalg = xfrm_algo_clone(orig->aalg);
1125 		if (!x->aalg)
1126 			goto error;
1127 	}
1128 	x->props.aalgo = orig->props.aalgo;
1129 
1130 	if (orig->ealg) {
1131 		x->ealg = xfrm_algo_clone(orig->ealg);
1132 		if (!x->ealg)
1133 			goto error;
1134 	}
1135 	x->props.ealgo = orig->props.ealgo;
1136 
1137 	if (orig->calg) {
1138 		x->calg = xfrm_algo_clone(orig->calg);
1139 		if (!x->calg)
1140 			goto error;
1141 	}
1142 	x->props.calgo = orig->props.calgo;
1143 
1144 	if (orig->encap) {
1145 		x->encap = kmemdup(orig->encap, sizeof(*x->encap), GFP_KERNEL);
1146 		if (!x->encap)
1147 			goto error;
1148 	}
1149 
1150 	if (orig->coaddr) {
1151 		x->coaddr = kmemdup(orig->coaddr, sizeof(*x->coaddr),
1152 				    GFP_KERNEL);
1153 		if (!x->coaddr)
1154 			goto error;
1155 	}
1156 
1157 	err = xfrm_init_state(x);
1158 	if (err)
1159 		goto error;
1160 
1161 	x->props.flags = orig->props.flags;
1162 
1163 	x->curlft.add_time = orig->curlft.add_time;
1164 	x->km.state = orig->km.state;
1165 	x->km.seq = orig->km.seq;
1166 
1167 	return x;
1168 
1169  error:
1170 	if (errp)
1171 		*errp = err;
1172 	if (x) {
1173 		kfree(x->aalg);
1174 		kfree(x->ealg);
1175 		kfree(x->calg);
1176 		kfree(x->encap);
1177 		kfree(x->coaddr);
1178 	}
1179 	kfree(x);
1180 	return NULL;
1181 }
1182 
1183 /* xfrm_state_lock is held */
1184 struct xfrm_state * xfrm_migrate_state_find(struct xfrm_migrate *m)
1185 {
1186 	unsigned int h;
1187 	struct xfrm_state *x;
1188 	struct hlist_node *entry;
1189 
1190 	if (m->reqid) {
1191 		h = xfrm_dst_hash(&m->old_daddr, &m->old_saddr,
1192 				  m->reqid, m->old_family);
1193 		hlist_for_each_entry(x, entry, xfrm_state_bydst+h, bydst) {
1194 			if (x->props.mode != m->mode ||
1195 			    x->id.proto != m->proto)
1196 				continue;
1197 			if (m->reqid && x->props.reqid != m->reqid)
1198 				continue;
1199 			if (xfrm_addr_cmp(&x->id.daddr, &m->old_daddr,
1200 					  m->old_family) ||
1201 			    xfrm_addr_cmp(&x->props.saddr, &m->old_saddr,
1202 					  m->old_family))
1203 				continue;
1204 			xfrm_state_hold(x);
1205 			return x;
1206 		}
1207 	} else {
1208 		h = xfrm_src_hash(&m->old_daddr, &m->old_saddr,
1209 				  m->old_family);
1210 		hlist_for_each_entry(x, entry, xfrm_state_bysrc+h, bysrc) {
1211 			if (x->props.mode != m->mode ||
1212 			    x->id.proto != m->proto)
1213 				continue;
1214 			if (xfrm_addr_cmp(&x->id.daddr, &m->old_daddr,
1215 					  m->old_family) ||
1216 			    xfrm_addr_cmp(&x->props.saddr, &m->old_saddr,
1217 					  m->old_family))
1218 				continue;
1219 			xfrm_state_hold(x);
1220 			return x;
1221 		}
1222 	}
1223 
1224 	return NULL;
1225 }
1226 EXPORT_SYMBOL(xfrm_migrate_state_find);
1227 
1228 struct xfrm_state * xfrm_state_migrate(struct xfrm_state *x,
1229 				       struct xfrm_migrate *m)
1230 {
1231 	struct xfrm_state *xc;
1232 	int err;
1233 
1234 	xc = xfrm_state_clone(x, &err);
1235 	if (!xc)
1236 		return NULL;
1237 
1238 	memcpy(&xc->id.daddr, &m->new_daddr, sizeof(xc->id.daddr));
1239 	memcpy(&xc->props.saddr, &m->new_saddr, sizeof(xc->props.saddr));
1240 
1241 	/* add state */
1242 	if (!xfrm_addr_cmp(&x->id.daddr, &m->new_daddr, m->new_family)) {
1243 		/* a care is needed when the destination address of the
1244 		   state is to be updated as it is a part of triplet */
1245 		xfrm_state_insert(xc);
1246 	} else {
1247 		if ((err = xfrm_state_add(xc)) < 0)
1248 			goto error;
1249 	}
1250 
1251 	return xc;
1252 error:
1253 	kfree(xc);
1254 	return NULL;
1255 }
1256 EXPORT_SYMBOL(xfrm_state_migrate);
1257 #endif
1258 
1259 int xfrm_state_update(struct xfrm_state *x)
1260 {
1261 	struct xfrm_state *x1;
1262 	int err;
1263 	int use_spi = xfrm_id_proto_match(x->id.proto, IPSEC_PROTO_ANY);
1264 
1265 	spin_lock_bh(&xfrm_state_lock);
1266 	x1 = __xfrm_state_locate(x, use_spi, x->props.family);
1267 
1268 	err = -ESRCH;
1269 	if (!x1)
1270 		goto out;
1271 
1272 	if (xfrm_state_kern(x1)) {
1273 		xfrm_state_put(x1);
1274 		err = -EEXIST;
1275 		goto out;
1276 	}
1277 
1278 	if (x1->km.state == XFRM_STATE_ACQ) {
1279 		__xfrm_state_insert(x);
1280 		x = NULL;
1281 	}
1282 	err = 0;
1283 
1284 out:
1285 	spin_unlock_bh(&xfrm_state_lock);
1286 
1287 	if (err)
1288 		return err;
1289 
1290 	if (!x) {
1291 		xfrm_state_delete(x1);
1292 		xfrm_state_put(x1);
1293 		return 0;
1294 	}
1295 
1296 	err = -EINVAL;
1297 	spin_lock_bh(&x1->lock);
1298 	if (likely(x1->km.state == XFRM_STATE_VALID)) {
1299 		if (x->encap && x1->encap)
1300 			memcpy(x1->encap, x->encap, sizeof(*x1->encap));
1301 		if (x->coaddr && x1->coaddr) {
1302 			memcpy(x1->coaddr, x->coaddr, sizeof(*x1->coaddr));
1303 		}
1304 		if (!use_spi && memcmp(&x1->sel, &x->sel, sizeof(x1->sel)))
1305 			memcpy(&x1->sel, &x->sel, sizeof(x1->sel));
1306 		memcpy(&x1->lft, &x->lft, sizeof(x1->lft));
1307 		x1->km.dying = 0;
1308 
1309 		mod_timer(&x1->timer, jiffies + HZ);
1310 		if (x1->curlft.use_time)
1311 			xfrm_state_check_expire(x1);
1312 
1313 		err = 0;
1314 	}
1315 	spin_unlock_bh(&x1->lock);
1316 
1317 	xfrm_state_put(x1);
1318 
1319 	return err;
1320 }
1321 EXPORT_SYMBOL(xfrm_state_update);
1322 
1323 int xfrm_state_check_expire(struct xfrm_state *x)
1324 {
1325 	if (!x->curlft.use_time)
1326 		x->curlft.use_time = get_seconds();
1327 
1328 	if (x->km.state != XFRM_STATE_VALID)
1329 		return -EINVAL;
1330 
1331 	if (x->curlft.bytes >= x->lft.hard_byte_limit ||
1332 	    x->curlft.packets >= x->lft.hard_packet_limit) {
1333 		x->km.state = XFRM_STATE_EXPIRED;
1334 		mod_timer(&x->timer, jiffies);
1335 		return -EINVAL;
1336 	}
1337 
1338 	if (!x->km.dying &&
1339 	    (x->curlft.bytes >= x->lft.soft_byte_limit ||
1340 	     x->curlft.packets >= x->lft.soft_packet_limit)) {
1341 		x->km.dying = 1;
1342 		km_state_expired(x, 0, 0);
1343 	}
1344 	return 0;
1345 }
1346 EXPORT_SYMBOL(xfrm_state_check_expire);
1347 
1348 struct xfrm_state *
1349 xfrm_state_lookup(xfrm_address_t *daddr, __be32 spi, u8 proto,
1350 		  unsigned short family)
1351 {
1352 	struct xfrm_state *x;
1353 
1354 	spin_lock_bh(&xfrm_state_lock);
1355 	x = __xfrm_state_lookup(daddr, spi, proto, family);
1356 	spin_unlock_bh(&xfrm_state_lock);
1357 	return x;
1358 }
1359 EXPORT_SYMBOL(xfrm_state_lookup);
1360 
1361 struct xfrm_state *
1362 xfrm_state_lookup_byaddr(xfrm_address_t *daddr, xfrm_address_t *saddr,
1363 			 u8 proto, unsigned short family)
1364 {
1365 	struct xfrm_state *x;
1366 
1367 	spin_lock_bh(&xfrm_state_lock);
1368 	x = __xfrm_state_lookup_byaddr(daddr, saddr, proto, family);
1369 	spin_unlock_bh(&xfrm_state_lock);
1370 	return x;
1371 }
1372 EXPORT_SYMBOL(xfrm_state_lookup_byaddr);
1373 
1374 struct xfrm_state *
1375 xfrm_find_acq(u8 mode, u32 reqid, u8 proto,
1376 	      xfrm_address_t *daddr, xfrm_address_t *saddr,
1377 	      int create, unsigned short family)
1378 {
1379 	struct xfrm_state *x;
1380 
1381 	spin_lock_bh(&xfrm_state_lock);
1382 	x = __find_acq_core(family, mode, reqid, proto, daddr, saddr, create);
1383 	spin_unlock_bh(&xfrm_state_lock);
1384 
1385 	return x;
1386 }
1387 EXPORT_SYMBOL(xfrm_find_acq);
1388 
1389 #ifdef CONFIG_XFRM_SUB_POLICY
1390 int
1391 xfrm_tmpl_sort(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n,
1392 	       unsigned short family)
1393 {
1394 	int err = 0;
1395 	struct xfrm_state_afinfo *afinfo = xfrm_state_get_afinfo(family);
1396 	if (!afinfo)
1397 		return -EAFNOSUPPORT;
1398 
1399 	spin_lock_bh(&xfrm_state_lock);
1400 	if (afinfo->tmpl_sort)
1401 		err = afinfo->tmpl_sort(dst, src, n);
1402 	spin_unlock_bh(&xfrm_state_lock);
1403 	xfrm_state_put_afinfo(afinfo);
1404 	return err;
1405 }
1406 EXPORT_SYMBOL(xfrm_tmpl_sort);
1407 
1408 int
1409 xfrm_state_sort(struct xfrm_state **dst, struct xfrm_state **src, int n,
1410 		unsigned short family)
1411 {
1412 	int err = 0;
1413 	struct xfrm_state_afinfo *afinfo = xfrm_state_get_afinfo(family);
1414 	if (!afinfo)
1415 		return -EAFNOSUPPORT;
1416 
1417 	spin_lock_bh(&xfrm_state_lock);
1418 	if (afinfo->state_sort)
1419 		err = afinfo->state_sort(dst, src, n);
1420 	spin_unlock_bh(&xfrm_state_lock);
1421 	xfrm_state_put_afinfo(afinfo);
1422 	return err;
1423 }
1424 EXPORT_SYMBOL(xfrm_state_sort);
1425 #endif
1426 
1427 /* Silly enough, but I'm lazy to build resolution list */
1428 
1429 static struct xfrm_state *__xfrm_find_acq_byseq(u32 seq)
1430 {
1431 	int i;
1432 
1433 	for (i = 0; i <= xfrm_state_hmask; i++) {
1434 		struct hlist_node *entry;
1435 		struct xfrm_state *x;
1436 
1437 		hlist_for_each_entry(x, entry, xfrm_state_bydst+i, bydst) {
1438 			if (x->km.seq == seq &&
1439 			    x->km.state == XFRM_STATE_ACQ) {
1440 				xfrm_state_hold(x);
1441 				return x;
1442 			}
1443 		}
1444 	}
1445 	return NULL;
1446 }
1447 
1448 struct xfrm_state *xfrm_find_acq_byseq(u32 seq)
1449 {
1450 	struct xfrm_state *x;
1451 
1452 	spin_lock_bh(&xfrm_state_lock);
1453 	x = __xfrm_find_acq_byseq(seq);
1454 	spin_unlock_bh(&xfrm_state_lock);
1455 	return x;
1456 }
1457 EXPORT_SYMBOL(xfrm_find_acq_byseq);
1458 
1459 u32 xfrm_get_acqseq(void)
1460 {
1461 	u32 res;
1462 	static u32 acqseq;
1463 	static DEFINE_SPINLOCK(acqseq_lock);
1464 
1465 	spin_lock_bh(&acqseq_lock);
1466 	res = (++acqseq ? : ++acqseq);
1467 	spin_unlock_bh(&acqseq_lock);
1468 	return res;
1469 }
1470 EXPORT_SYMBOL(xfrm_get_acqseq);
1471 
1472 int xfrm_alloc_spi(struct xfrm_state *x, u32 low, u32 high)
1473 {
1474 	unsigned int h;
1475 	struct xfrm_state *x0;
1476 	int err = -ENOENT;
1477 	__be32 minspi = htonl(low);
1478 	__be32 maxspi = htonl(high);
1479 
1480 	spin_lock_bh(&x->lock);
1481 	if (x->km.state == XFRM_STATE_DEAD)
1482 		goto unlock;
1483 
1484 	err = 0;
1485 	if (x->id.spi)
1486 		goto unlock;
1487 
1488 	err = -ENOENT;
1489 
1490 	if (minspi == maxspi) {
1491 		x0 = xfrm_state_lookup(&x->id.daddr, minspi, x->id.proto, x->props.family);
1492 		if (x0) {
1493 			xfrm_state_put(x0);
1494 			goto unlock;
1495 		}
1496 		x->id.spi = minspi;
1497 	} else {
1498 		u32 spi = 0;
1499 		for (h=0; h<high-low+1; h++) {
1500 			spi = low + net_random()%(high-low+1);
1501 			x0 = xfrm_state_lookup(&x->id.daddr, htonl(spi), x->id.proto, x->props.family);
1502 			if (x0 == NULL) {
1503 				x->id.spi = htonl(spi);
1504 				break;
1505 			}
1506 			xfrm_state_put(x0);
1507 		}
1508 	}
1509 	if (x->id.spi) {
1510 		spin_lock_bh(&xfrm_state_lock);
1511 		h = xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto, x->props.family);
1512 		hlist_add_head(&x->byspi, xfrm_state_byspi+h);
1513 		spin_unlock_bh(&xfrm_state_lock);
1514 
1515 		err = 0;
1516 	}
1517 
1518 unlock:
1519 	spin_unlock_bh(&x->lock);
1520 
1521 	return err;
1522 }
1523 EXPORT_SYMBOL(xfrm_alloc_spi);
1524 
1525 int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*),
1526 		    void *data)
1527 {
1528 	int i;
1529 	struct xfrm_state *x, *last = NULL;
1530 	struct hlist_node *entry;
1531 	int count = 0;
1532 	int err = 0;
1533 
1534 	spin_lock_bh(&xfrm_state_lock);
1535 	for (i = 0; i <= xfrm_state_hmask; i++) {
1536 		hlist_for_each_entry(x, entry, xfrm_state_bydst+i, bydst) {
1537 			if (!xfrm_id_proto_match(x->id.proto, proto))
1538 				continue;
1539 			if (last) {
1540 				err = func(last, count, data);
1541 				if (err)
1542 					goto out;
1543 			}
1544 			last = x;
1545 			count++;
1546 		}
1547 	}
1548 	if (count == 0) {
1549 		err = -ENOENT;
1550 		goto out;
1551 	}
1552 	err = func(last, 0, data);
1553 out:
1554 	spin_unlock_bh(&xfrm_state_lock);
1555 	return err;
1556 }
1557 EXPORT_SYMBOL(xfrm_state_walk);
1558 
1559 
1560 void xfrm_replay_notify(struct xfrm_state *x, int event)
1561 {
1562 	struct km_event c;
1563 	/* we send notify messages in case
1564 	 *  1. we updated on of the sequence numbers, and the seqno difference
1565 	 *     is at least x->replay_maxdiff, in this case we also update the
1566 	 *     timeout of our timer function
1567 	 *  2. if x->replay_maxage has elapsed since last update,
1568 	 *     and there were changes
1569 	 *
1570 	 *  The state structure must be locked!
1571 	 */
1572 
1573 	switch (event) {
1574 	case XFRM_REPLAY_UPDATE:
1575 		if (x->replay_maxdiff &&
1576 		    (x->replay.seq - x->preplay.seq < x->replay_maxdiff) &&
1577 		    (x->replay.oseq - x->preplay.oseq < x->replay_maxdiff)) {
1578 			if (x->xflags & XFRM_TIME_DEFER)
1579 				event = XFRM_REPLAY_TIMEOUT;
1580 			else
1581 				return;
1582 		}
1583 
1584 		break;
1585 
1586 	case XFRM_REPLAY_TIMEOUT:
1587 		if ((x->replay.seq == x->preplay.seq) &&
1588 		    (x->replay.bitmap == x->preplay.bitmap) &&
1589 		    (x->replay.oseq == x->preplay.oseq)) {
1590 			x->xflags |= XFRM_TIME_DEFER;
1591 			return;
1592 		}
1593 
1594 		break;
1595 	}
1596 
1597 	memcpy(&x->preplay, &x->replay, sizeof(struct xfrm_replay_state));
1598 	c.event = XFRM_MSG_NEWAE;
1599 	c.data.aevent = event;
1600 	km_state_notify(x, &c);
1601 
1602 	if (x->replay_maxage &&
1603 	    !mod_timer(&x->rtimer, jiffies + x->replay_maxage))
1604 		x->xflags &= ~XFRM_TIME_DEFER;
1605 }
1606 
1607 static void xfrm_replay_timer_handler(unsigned long data)
1608 {
1609 	struct xfrm_state *x = (struct xfrm_state*)data;
1610 
1611 	spin_lock(&x->lock);
1612 
1613 	if (x->km.state == XFRM_STATE_VALID) {
1614 		if (xfrm_aevent_is_on())
1615 			xfrm_replay_notify(x, XFRM_REPLAY_TIMEOUT);
1616 		else
1617 			x->xflags |= XFRM_TIME_DEFER;
1618 	}
1619 
1620 	spin_unlock(&x->lock);
1621 }
1622 
1623 int xfrm_replay_check(struct xfrm_state *x,
1624 		      struct sk_buff *skb, __be32 net_seq)
1625 {
1626 	u32 diff;
1627 	u32 seq = ntohl(net_seq);
1628 
1629 	if (unlikely(seq == 0))
1630 		goto err;
1631 
1632 	if (likely(seq > x->replay.seq))
1633 		return 0;
1634 
1635 	diff = x->replay.seq - seq;
1636 	if (diff >= min_t(unsigned int, x->props.replay_window,
1637 			  sizeof(x->replay.bitmap) * 8)) {
1638 		x->stats.replay_window++;
1639 		goto err;
1640 	}
1641 
1642 	if (x->replay.bitmap & (1U << diff)) {
1643 		x->stats.replay++;
1644 		goto err;
1645 	}
1646 	return 0;
1647 
1648 err:
1649 	xfrm_audit_state_replay(x, skb, net_seq);
1650 	return -EINVAL;
1651 }
1652 
1653 void xfrm_replay_advance(struct xfrm_state *x, __be32 net_seq)
1654 {
1655 	u32 diff;
1656 	u32 seq = ntohl(net_seq);
1657 
1658 	if (seq > x->replay.seq) {
1659 		diff = seq - x->replay.seq;
1660 		if (diff < x->props.replay_window)
1661 			x->replay.bitmap = ((x->replay.bitmap) << diff) | 1;
1662 		else
1663 			x->replay.bitmap = 1;
1664 		x->replay.seq = seq;
1665 	} else {
1666 		diff = x->replay.seq - seq;
1667 		x->replay.bitmap |= (1U << diff);
1668 	}
1669 
1670 	if (xfrm_aevent_is_on())
1671 		xfrm_replay_notify(x, XFRM_REPLAY_UPDATE);
1672 }
1673 
1674 static LIST_HEAD(xfrm_km_list);
1675 static DEFINE_RWLOCK(xfrm_km_lock);
1676 
1677 void km_policy_notify(struct xfrm_policy *xp, int dir, struct km_event *c)
1678 {
1679 	struct xfrm_mgr *km;
1680 
1681 	read_lock(&xfrm_km_lock);
1682 	list_for_each_entry(km, &xfrm_km_list, list)
1683 		if (km->notify_policy)
1684 			km->notify_policy(xp, dir, c);
1685 	read_unlock(&xfrm_km_lock);
1686 }
1687 
1688 void km_state_notify(struct xfrm_state *x, struct km_event *c)
1689 {
1690 	struct xfrm_mgr *km;
1691 	read_lock(&xfrm_km_lock);
1692 	list_for_each_entry(km, &xfrm_km_list, list)
1693 		if (km->notify)
1694 			km->notify(x, c);
1695 	read_unlock(&xfrm_km_lock);
1696 }
1697 
1698 EXPORT_SYMBOL(km_policy_notify);
1699 EXPORT_SYMBOL(km_state_notify);
1700 
1701 void km_state_expired(struct xfrm_state *x, int hard, u32 pid)
1702 {
1703 	struct km_event c;
1704 
1705 	c.data.hard = hard;
1706 	c.pid = pid;
1707 	c.event = XFRM_MSG_EXPIRE;
1708 	km_state_notify(x, &c);
1709 
1710 	if (hard)
1711 		wake_up(&km_waitq);
1712 }
1713 
1714 EXPORT_SYMBOL(km_state_expired);
1715 /*
1716  * We send to all registered managers regardless of failure
1717  * We are happy with one success
1718 */
1719 int km_query(struct xfrm_state *x, struct xfrm_tmpl *t, struct xfrm_policy *pol)
1720 {
1721 	int err = -EINVAL, acqret;
1722 	struct xfrm_mgr *km;
1723 
1724 	read_lock(&xfrm_km_lock);
1725 	list_for_each_entry(km, &xfrm_km_list, list) {
1726 		acqret = km->acquire(x, t, pol, XFRM_POLICY_OUT);
1727 		if (!acqret)
1728 			err = acqret;
1729 	}
1730 	read_unlock(&xfrm_km_lock);
1731 	return err;
1732 }
1733 EXPORT_SYMBOL(km_query);
1734 
1735 int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport)
1736 {
1737 	int err = -EINVAL;
1738 	struct xfrm_mgr *km;
1739 
1740 	read_lock(&xfrm_km_lock);
1741 	list_for_each_entry(km, &xfrm_km_list, list) {
1742 		if (km->new_mapping)
1743 			err = km->new_mapping(x, ipaddr, sport);
1744 		if (!err)
1745 			break;
1746 	}
1747 	read_unlock(&xfrm_km_lock);
1748 	return err;
1749 }
1750 EXPORT_SYMBOL(km_new_mapping);
1751 
1752 void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 pid)
1753 {
1754 	struct km_event c;
1755 
1756 	c.data.hard = hard;
1757 	c.pid = pid;
1758 	c.event = XFRM_MSG_POLEXPIRE;
1759 	km_policy_notify(pol, dir, &c);
1760 
1761 	if (hard)
1762 		wake_up(&km_waitq);
1763 }
1764 EXPORT_SYMBOL(km_policy_expired);
1765 
1766 #ifdef CONFIG_XFRM_MIGRATE
1767 int km_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
1768 	       struct xfrm_migrate *m, int num_migrate)
1769 {
1770 	int err = -EINVAL;
1771 	int ret;
1772 	struct xfrm_mgr *km;
1773 
1774 	read_lock(&xfrm_km_lock);
1775 	list_for_each_entry(km, &xfrm_km_list, list) {
1776 		if (km->migrate) {
1777 			ret = km->migrate(sel, dir, type, m, num_migrate);
1778 			if (!ret)
1779 				err = ret;
1780 		}
1781 	}
1782 	read_unlock(&xfrm_km_lock);
1783 	return err;
1784 }
1785 EXPORT_SYMBOL(km_migrate);
1786 #endif
1787 
1788 int km_report(u8 proto, struct xfrm_selector *sel, xfrm_address_t *addr)
1789 {
1790 	int err = -EINVAL;
1791 	int ret;
1792 	struct xfrm_mgr *km;
1793 
1794 	read_lock(&xfrm_km_lock);
1795 	list_for_each_entry(km, &xfrm_km_list, list) {
1796 		if (km->report) {
1797 			ret = km->report(proto, sel, addr);
1798 			if (!ret)
1799 				err = ret;
1800 		}
1801 	}
1802 	read_unlock(&xfrm_km_lock);
1803 	return err;
1804 }
1805 EXPORT_SYMBOL(km_report);
1806 
1807 int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen)
1808 {
1809 	int err;
1810 	u8 *data;
1811 	struct xfrm_mgr *km;
1812 	struct xfrm_policy *pol = NULL;
1813 
1814 	if (optlen <= 0 || optlen > PAGE_SIZE)
1815 		return -EMSGSIZE;
1816 
1817 	data = kmalloc(optlen, GFP_KERNEL);
1818 	if (!data)
1819 		return -ENOMEM;
1820 
1821 	err = -EFAULT;
1822 	if (copy_from_user(data, optval, optlen))
1823 		goto out;
1824 
1825 	err = -EINVAL;
1826 	read_lock(&xfrm_km_lock);
1827 	list_for_each_entry(km, &xfrm_km_list, list) {
1828 		pol = km->compile_policy(sk, optname, data,
1829 					 optlen, &err);
1830 		if (err >= 0)
1831 			break;
1832 	}
1833 	read_unlock(&xfrm_km_lock);
1834 
1835 	if (err >= 0) {
1836 		xfrm_sk_policy_insert(sk, err, pol);
1837 		xfrm_pol_put(pol);
1838 		err = 0;
1839 	}
1840 
1841 out:
1842 	kfree(data);
1843 	return err;
1844 }
1845 EXPORT_SYMBOL(xfrm_user_policy);
1846 
1847 int xfrm_register_km(struct xfrm_mgr *km)
1848 {
1849 	write_lock_bh(&xfrm_km_lock);
1850 	list_add_tail(&km->list, &xfrm_km_list);
1851 	write_unlock_bh(&xfrm_km_lock);
1852 	return 0;
1853 }
1854 EXPORT_SYMBOL(xfrm_register_km);
1855 
1856 int xfrm_unregister_km(struct xfrm_mgr *km)
1857 {
1858 	write_lock_bh(&xfrm_km_lock);
1859 	list_del(&km->list);
1860 	write_unlock_bh(&xfrm_km_lock);
1861 	return 0;
1862 }
1863 EXPORT_SYMBOL(xfrm_unregister_km);
1864 
1865 int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo)
1866 {
1867 	int err = 0;
1868 	if (unlikely(afinfo == NULL))
1869 		return -EINVAL;
1870 	if (unlikely(afinfo->family >= NPROTO))
1871 		return -EAFNOSUPPORT;
1872 	write_lock_bh(&xfrm_state_afinfo_lock);
1873 	if (unlikely(xfrm_state_afinfo[afinfo->family] != NULL))
1874 		err = -ENOBUFS;
1875 	else
1876 		xfrm_state_afinfo[afinfo->family] = afinfo;
1877 	write_unlock_bh(&xfrm_state_afinfo_lock);
1878 	return err;
1879 }
1880 EXPORT_SYMBOL(xfrm_state_register_afinfo);
1881 
1882 int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo)
1883 {
1884 	int err = 0;
1885 	if (unlikely(afinfo == NULL))
1886 		return -EINVAL;
1887 	if (unlikely(afinfo->family >= NPROTO))
1888 		return -EAFNOSUPPORT;
1889 	write_lock_bh(&xfrm_state_afinfo_lock);
1890 	if (likely(xfrm_state_afinfo[afinfo->family] != NULL)) {
1891 		if (unlikely(xfrm_state_afinfo[afinfo->family] != afinfo))
1892 			err = -EINVAL;
1893 		else
1894 			xfrm_state_afinfo[afinfo->family] = NULL;
1895 	}
1896 	write_unlock_bh(&xfrm_state_afinfo_lock);
1897 	return err;
1898 }
1899 EXPORT_SYMBOL(xfrm_state_unregister_afinfo);
1900 
1901 static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
1902 {
1903 	struct xfrm_state_afinfo *afinfo;
1904 	if (unlikely(family >= NPROTO))
1905 		return NULL;
1906 	read_lock(&xfrm_state_afinfo_lock);
1907 	afinfo = xfrm_state_afinfo[family];
1908 	if (unlikely(!afinfo))
1909 		read_unlock(&xfrm_state_afinfo_lock);
1910 	return afinfo;
1911 }
1912 
1913 static void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo)
1914 	__releases(xfrm_state_afinfo_lock)
1915 {
1916 	read_unlock(&xfrm_state_afinfo_lock);
1917 }
1918 
1919 /* Temporarily located here until net/xfrm/xfrm_tunnel.c is created */
1920 void xfrm_state_delete_tunnel(struct xfrm_state *x)
1921 {
1922 	if (x->tunnel) {
1923 		struct xfrm_state *t = x->tunnel;
1924 
1925 		if (atomic_read(&t->tunnel_users) == 2)
1926 			xfrm_state_delete(t);
1927 		atomic_dec(&t->tunnel_users);
1928 		xfrm_state_put(t);
1929 		x->tunnel = NULL;
1930 	}
1931 }
1932 EXPORT_SYMBOL(xfrm_state_delete_tunnel);
1933 
1934 int xfrm_state_mtu(struct xfrm_state *x, int mtu)
1935 {
1936 	int res;
1937 
1938 	spin_lock_bh(&x->lock);
1939 	if (x->km.state == XFRM_STATE_VALID &&
1940 	    x->type && x->type->get_mtu)
1941 		res = x->type->get_mtu(x, mtu);
1942 	else
1943 		res = mtu - x->props.header_len;
1944 	spin_unlock_bh(&x->lock);
1945 	return res;
1946 }
1947 
1948 int xfrm_init_state(struct xfrm_state *x)
1949 {
1950 	struct xfrm_state_afinfo *afinfo;
1951 	struct xfrm_mode *inner_mode;
1952 	int family = x->props.family;
1953 	int err;
1954 
1955 	err = -EAFNOSUPPORT;
1956 	afinfo = xfrm_state_get_afinfo(family);
1957 	if (!afinfo)
1958 		goto error;
1959 
1960 	err = 0;
1961 	if (afinfo->init_flags)
1962 		err = afinfo->init_flags(x);
1963 
1964 	xfrm_state_put_afinfo(afinfo);
1965 
1966 	if (err)
1967 		goto error;
1968 
1969 	err = -EPROTONOSUPPORT;
1970 
1971 	if (x->sel.family != AF_UNSPEC) {
1972 		inner_mode = xfrm_get_mode(x->props.mode, x->sel.family);
1973 		if (inner_mode == NULL)
1974 			goto error;
1975 
1976 		if (!(inner_mode->flags & XFRM_MODE_FLAG_TUNNEL) &&
1977 		    family != x->sel.family) {
1978 			xfrm_put_mode(inner_mode);
1979 			goto error;
1980 		}
1981 
1982 		x->inner_mode = inner_mode;
1983 	} else {
1984 		struct xfrm_mode *inner_mode_iaf;
1985 
1986 		inner_mode = xfrm_get_mode(x->props.mode, AF_INET);
1987 		if (inner_mode == NULL)
1988 			goto error;
1989 
1990 		if (!(inner_mode->flags & XFRM_MODE_FLAG_TUNNEL)) {
1991 			xfrm_put_mode(inner_mode);
1992 			goto error;
1993 		}
1994 
1995 		inner_mode_iaf = xfrm_get_mode(x->props.mode, AF_INET6);
1996 		if (inner_mode_iaf == NULL)
1997 			goto error;
1998 
1999 		if (!(inner_mode_iaf->flags & XFRM_MODE_FLAG_TUNNEL)) {
2000 			xfrm_put_mode(inner_mode_iaf);
2001 			goto error;
2002 		}
2003 
2004 		if (x->props.family == AF_INET) {
2005 			x->inner_mode = inner_mode;
2006 			x->inner_mode_iaf = inner_mode_iaf;
2007 		} else {
2008 			x->inner_mode = inner_mode_iaf;
2009 			x->inner_mode_iaf = inner_mode;
2010 		}
2011 	}
2012 
2013 	x->type = xfrm_get_type(x->id.proto, family);
2014 	if (x->type == NULL)
2015 		goto error;
2016 
2017 	err = x->type->init_state(x);
2018 	if (err)
2019 		goto error;
2020 
2021 	x->outer_mode = xfrm_get_mode(x->props.mode, family);
2022 	if (x->outer_mode == NULL)
2023 		goto error;
2024 
2025 	x->km.state = XFRM_STATE_VALID;
2026 
2027 error:
2028 	return err;
2029 }
2030 
2031 EXPORT_SYMBOL(xfrm_init_state);
2032 
2033 void __init xfrm_state_init(void)
2034 {
2035 	unsigned int sz;
2036 
2037 	sz = sizeof(struct hlist_head) * 8;
2038 
2039 	xfrm_state_bydst = xfrm_hash_alloc(sz);
2040 	xfrm_state_bysrc = xfrm_hash_alloc(sz);
2041 	xfrm_state_byspi = xfrm_hash_alloc(sz);
2042 	if (!xfrm_state_bydst || !xfrm_state_bysrc || !xfrm_state_byspi)
2043 		panic("XFRM: Cannot allocate bydst/bysrc/byspi hashes.");
2044 	xfrm_state_hmask = ((sz / sizeof(struct hlist_head)) - 1);
2045 
2046 	INIT_WORK(&xfrm_state_gc_work, xfrm_state_gc_task);
2047 }
2048 
2049 #ifdef CONFIG_AUDITSYSCALL
2050 static void xfrm_audit_helper_sainfo(struct xfrm_state *x,
2051 				     struct audit_buffer *audit_buf)
2052 {
2053 	struct xfrm_sec_ctx *ctx = x->security;
2054 	u32 spi = ntohl(x->id.spi);
2055 
2056 	if (ctx)
2057 		audit_log_format(audit_buf, " sec_alg=%u sec_doi=%u sec_obj=%s",
2058 				 ctx->ctx_alg, ctx->ctx_doi, ctx->ctx_str);
2059 
2060 	switch(x->props.family) {
2061 	case AF_INET:
2062 		audit_log_format(audit_buf,
2063 				 " src=" NIPQUAD_FMT " dst=" NIPQUAD_FMT,
2064 				 NIPQUAD(x->props.saddr.a4),
2065 				 NIPQUAD(x->id.daddr.a4));
2066 		break;
2067 	case AF_INET6:
2068 		audit_log_format(audit_buf,
2069 				 " src=" NIP6_FMT " dst=" NIP6_FMT,
2070 				 NIP6(*(struct in6_addr *)x->props.saddr.a6),
2071 				 NIP6(*(struct in6_addr *)x->id.daddr.a6));
2072 		break;
2073 	}
2074 
2075 	audit_log_format(audit_buf, " spi=%u(0x%x)", spi, spi);
2076 }
2077 
2078 static void xfrm_audit_helper_pktinfo(struct sk_buff *skb, u16 family,
2079 				      struct audit_buffer *audit_buf)
2080 {
2081 	struct iphdr *iph4;
2082 	struct ipv6hdr *iph6;
2083 
2084 	switch (family) {
2085 	case AF_INET:
2086 		iph4 = ip_hdr(skb);
2087 		audit_log_format(audit_buf,
2088 				 " src=" NIPQUAD_FMT " dst=" NIPQUAD_FMT,
2089 				 NIPQUAD(iph4->saddr),
2090 				 NIPQUAD(iph4->daddr));
2091 		break;
2092 	case AF_INET6:
2093 		iph6 = ipv6_hdr(skb);
2094 		audit_log_format(audit_buf,
2095 				 " src=" NIP6_FMT " dst=" NIP6_FMT
2096 				 " flowlbl=0x%x%x%x",
2097 				 NIP6(iph6->saddr),
2098 				 NIP6(iph6->daddr),
2099 				 iph6->flow_lbl[0] & 0x0f,
2100 				 iph6->flow_lbl[1],
2101 				 iph6->flow_lbl[2]);
2102 		break;
2103 	}
2104 }
2105 
2106 void xfrm_audit_state_add(struct xfrm_state *x, int result,
2107 			  u32 auid, u32 secid)
2108 {
2109 	struct audit_buffer *audit_buf;
2110 
2111 	audit_buf = xfrm_audit_start("SAD-add");
2112 	if (audit_buf == NULL)
2113 		return;
2114 	xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
2115 	xfrm_audit_helper_sainfo(x, audit_buf);
2116 	audit_log_format(audit_buf, " res=%u", result);
2117 	audit_log_end(audit_buf);
2118 }
2119 EXPORT_SYMBOL_GPL(xfrm_audit_state_add);
2120 
2121 void xfrm_audit_state_delete(struct xfrm_state *x, int result,
2122 			     u32 auid, u32 secid)
2123 {
2124 	struct audit_buffer *audit_buf;
2125 
2126 	audit_buf = xfrm_audit_start("SAD-delete");
2127 	if (audit_buf == NULL)
2128 		return;
2129 	xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
2130 	xfrm_audit_helper_sainfo(x, audit_buf);
2131 	audit_log_format(audit_buf, " res=%u", result);
2132 	audit_log_end(audit_buf);
2133 }
2134 EXPORT_SYMBOL_GPL(xfrm_audit_state_delete);
2135 
2136 void xfrm_audit_state_replay_overflow(struct xfrm_state *x,
2137 				      struct sk_buff *skb)
2138 {
2139 	struct audit_buffer *audit_buf;
2140 	u32 spi;
2141 
2142 	audit_buf = xfrm_audit_start("SA-replay-overflow");
2143 	if (audit_buf == NULL)
2144 		return;
2145 	xfrm_audit_helper_pktinfo(skb, x->props.family, audit_buf);
2146 	/* don't record the sequence number because it's inherent in this kind
2147 	 * of audit message */
2148 	spi = ntohl(x->id.spi);
2149 	audit_log_format(audit_buf, " spi=%u(0x%x)", spi, spi);
2150 	audit_log_end(audit_buf);
2151 }
2152 EXPORT_SYMBOL_GPL(xfrm_audit_state_replay_overflow);
2153 
2154 static void xfrm_audit_state_replay(struct xfrm_state *x,
2155 			     struct sk_buff *skb, __be32 net_seq)
2156 {
2157 	struct audit_buffer *audit_buf;
2158 	u32 spi;
2159 
2160 	audit_buf = xfrm_audit_start("SA-replayed-pkt");
2161 	if (audit_buf == NULL)
2162 		return;
2163 	xfrm_audit_helper_pktinfo(skb, x->props.family, audit_buf);
2164 	spi = ntohl(x->id.spi);
2165 	audit_log_format(audit_buf, " spi=%u(0x%x) seqno=%u",
2166 			 spi, spi, ntohl(net_seq));
2167 	audit_log_end(audit_buf);
2168 }
2169 
2170 void xfrm_audit_state_notfound_simple(struct sk_buff *skb, u16 family)
2171 {
2172 	struct audit_buffer *audit_buf;
2173 
2174 	audit_buf = xfrm_audit_start("SA-notfound");
2175 	if (audit_buf == NULL)
2176 		return;
2177 	xfrm_audit_helper_pktinfo(skb, family, audit_buf);
2178 	audit_log_end(audit_buf);
2179 }
2180 EXPORT_SYMBOL_GPL(xfrm_audit_state_notfound_simple);
2181 
2182 void xfrm_audit_state_notfound(struct sk_buff *skb, u16 family,
2183 			       __be32 net_spi, __be32 net_seq)
2184 {
2185 	struct audit_buffer *audit_buf;
2186 	u32 spi;
2187 
2188 	audit_buf = xfrm_audit_start("SA-notfound");
2189 	if (audit_buf == NULL)
2190 		return;
2191 	xfrm_audit_helper_pktinfo(skb, family, audit_buf);
2192 	spi = ntohl(net_spi);
2193 	audit_log_format(audit_buf, " spi=%u(0x%x) seqno=%u",
2194 			 spi, spi, ntohl(net_seq));
2195 	audit_log_end(audit_buf);
2196 }
2197 EXPORT_SYMBOL_GPL(xfrm_audit_state_notfound);
2198 
2199 void xfrm_audit_state_icvfail(struct xfrm_state *x,
2200 			      struct sk_buff *skb, u8 proto)
2201 {
2202 	struct audit_buffer *audit_buf;
2203 	__be32 net_spi;
2204 	__be32 net_seq;
2205 
2206 	audit_buf = xfrm_audit_start("SA-icv-failure");
2207 	if (audit_buf == NULL)
2208 		return;
2209 	xfrm_audit_helper_pktinfo(skb, x->props.family, audit_buf);
2210 	if (xfrm_parse_spi(skb, proto, &net_spi, &net_seq) == 0) {
2211 		u32 spi = ntohl(net_spi);
2212 		audit_log_format(audit_buf, " spi=%u(0x%x) seqno=%u",
2213 				 spi, spi, ntohl(net_seq));
2214 	}
2215 	audit_log_end(audit_buf);
2216 }
2217 EXPORT_SYMBOL_GPL(xfrm_audit_state_icvfail);
2218 #endif /* CONFIG_AUDITSYSCALL */
2219