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