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