1 /* 2 * xfrm_policy.c 3 * 4 * Changes: 5 * Mitsuru KANDA @USAGI 6 * Kazunori MIYAZAWA @USAGI 7 * Kunihiro Ishiguro <kunihiro@ipinfusion.com> 8 * IPv6 support 9 * Kazunori MIYAZAWA @USAGI 10 * YOSHIFUJI Hideaki 11 * Split up af-specific portion 12 * Derek Atkins <derek@ihtfp.com> Add the post_input processor 13 * 14 */ 15 16 #include <linux/err.h> 17 #include <linux/slab.h> 18 #include <linux/kmod.h> 19 #include <linux/list.h> 20 #include <linux/spinlock.h> 21 #include <linux/workqueue.h> 22 #include <linux/notifier.h> 23 #include <linux/netdevice.h> 24 #include <linux/netfilter.h> 25 #include <linux/module.h> 26 #include <linux/cache.h> 27 #include <linux/audit.h> 28 #include <net/dst.h> 29 #include <net/xfrm.h> 30 #include <net/ip.h> 31 #ifdef CONFIG_XFRM_STATISTICS 32 #include <net/snmp.h> 33 #endif 34 35 #include "xfrm_hash.h" 36 37 DEFINE_MUTEX(xfrm_cfg_mutex); 38 EXPORT_SYMBOL(xfrm_cfg_mutex); 39 40 static DEFINE_SPINLOCK(xfrm_policy_sk_bundle_lock); 41 static struct dst_entry *xfrm_policy_sk_bundles; 42 static DEFINE_RWLOCK(xfrm_policy_lock); 43 44 static DEFINE_RWLOCK(xfrm_policy_afinfo_lock); 45 static struct xfrm_policy_afinfo *xfrm_policy_afinfo[NPROTO]; 46 47 static struct kmem_cache *xfrm_dst_cache __read_mostly; 48 49 static struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family); 50 static void xfrm_policy_put_afinfo(struct xfrm_policy_afinfo *afinfo); 51 static void xfrm_init_pmtu(struct dst_entry *dst); 52 static int stale_bundle(struct dst_entry *dst); 53 54 static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol, 55 int dir); 56 57 static inline int 58 __xfrm4_selector_match(struct xfrm_selector *sel, struct flowi *fl) 59 { 60 return addr_match(&fl->fl4_dst, &sel->daddr, sel->prefixlen_d) && 61 addr_match(&fl->fl4_src, &sel->saddr, sel->prefixlen_s) && 62 !((xfrm_flowi_dport(fl) ^ sel->dport) & sel->dport_mask) && 63 !((xfrm_flowi_sport(fl) ^ sel->sport) & sel->sport_mask) && 64 (fl->proto == sel->proto || !sel->proto) && 65 (fl->oif == sel->ifindex || !sel->ifindex); 66 } 67 68 static inline int 69 __xfrm6_selector_match(struct xfrm_selector *sel, struct flowi *fl) 70 { 71 return addr_match(&fl->fl6_dst, &sel->daddr, sel->prefixlen_d) && 72 addr_match(&fl->fl6_src, &sel->saddr, sel->prefixlen_s) && 73 !((xfrm_flowi_dport(fl) ^ sel->dport) & sel->dport_mask) && 74 !((xfrm_flowi_sport(fl) ^ sel->sport) & sel->sport_mask) && 75 (fl->proto == sel->proto || !sel->proto) && 76 (fl->oif == sel->ifindex || !sel->ifindex); 77 } 78 79 int xfrm_selector_match(struct xfrm_selector *sel, struct flowi *fl, 80 unsigned short family) 81 { 82 switch (family) { 83 case AF_INET: 84 return __xfrm4_selector_match(sel, fl); 85 case AF_INET6: 86 return __xfrm6_selector_match(sel, fl); 87 } 88 return 0; 89 } 90 91 static inline struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos, 92 xfrm_address_t *saddr, 93 xfrm_address_t *daddr, 94 int family) 95 { 96 struct xfrm_policy_afinfo *afinfo; 97 struct dst_entry *dst; 98 99 afinfo = xfrm_policy_get_afinfo(family); 100 if (unlikely(afinfo == NULL)) 101 return ERR_PTR(-EAFNOSUPPORT); 102 103 dst = afinfo->dst_lookup(net, tos, saddr, daddr); 104 105 xfrm_policy_put_afinfo(afinfo); 106 107 return dst; 108 } 109 110 static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, int tos, 111 xfrm_address_t *prev_saddr, 112 xfrm_address_t *prev_daddr, 113 int family) 114 { 115 struct net *net = xs_net(x); 116 xfrm_address_t *saddr = &x->props.saddr; 117 xfrm_address_t *daddr = &x->id.daddr; 118 struct dst_entry *dst; 119 120 if (x->type->flags & XFRM_TYPE_LOCAL_COADDR) { 121 saddr = x->coaddr; 122 daddr = prev_daddr; 123 } 124 if (x->type->flags & XFRM_TYPE_REMOTE_COADDR) { 125 saddr = prev_saddr; 126 daddr = x->coaddr; 127 } 128 129 dst = __xfrm_dst_lookup(net, tos, saddr, daddr, family); 130 131 if (!IS_ERR(dst)) { 132 if (prev_saddr != saddr) 133 memcpy(prev_saddr, saddr, sizeof(*prev_saddr)); 134 if (prev_daddr != daddr) 135 memcpy(prev_daddr, daddr, sizeof(*prev_daddr)); 136 } 137 138 return dst; 139 } 140 141 static inline unsigned long make_jiffies(long secs) 142 { 143 if (secs >= (MAX_SCHEDULE_TIMEOUT-1)/HZ) 144 return MAX_SCHEDULE_TIMEOUT-1; 145 else 146 return secs*HZ; 147 } 148 149 static void xfrm_policy_timer(unsigned long data) 150 { 151 struct xfrm_policy *xp = (struct xfrm_policy*)data; 152 unsigned long now = get_seconds(); 153 long next = LONG_MAX; 154 int warn = 0; 155 int dir; 156 157 read_lock(&xp->lock); 158 159 if (unlikely(xp->walk.dead)) 160 goto out; 161 162 dir = xfrm_policy_id2dir(xp->index); 163 164 if (xp->lft.hard_add_expires_seconds) { 165 long tmo = xp->lft.hard_add_expires_seconds + 166 xp->curlft.add_time - now; 167 if (tmo <= 0) 168 goto expired; 169 if (tmo < next) 170 next = tmo; 171 } 172 if (xp->lft.hard_use_expires_seconds) { 173 long tmo = xp->lft.hard_use_expires_seconds + 174 (xp->curlft.use_time ? : xp->curlft.add_time) - now; 175 if (tmo <= 0) 176 goto expired; 177 if (tmo < next) 178 next = tmo; 179 } 180 if (xp->lft.soft_add_expires_seconds) { 181 long tmo = xp->lft.soft_add_expires_seconds + 182 xp->curlft.add_time - now; 183 if (tmo <= 0) { 184 warn = 1; 185 tmo = XFRM_KM_TIMEOUT; 186 } 187 if (tmo < next) 188 next = tmo; 189 } 190 if (xp->lft.soft_use_expires_seconds) { 191 long tmo = xp->lft.soft_use_expires_seconds + 192 (xp->curlft.use_time ? : xp->curlft.add_time) - now; 193 if (tmo <= 0) { 194 warn = 1; 195 tmo = XFRM_KM_TIMEOUT; 196 } 197 if (tmo < next) 198 next = tmo; 199 } 200 201 if (warn) 202 km_policy_expired(xp, dir, 0, 0); 203 if (next != LONG_MAX && 204 !mod_timer(&xp->timer, jiffies + make_jiffies(next))) 205 xfrm_pol_hold(xp); 206 207 out: 208 read_unlock(&xp->lock); 209 xfrm_pol_put(xp); 210 return; 211 212 expired: 213 read_unlock(&xp->lock); 214 if (!xfrm_policy_delete(xp, dir)) 215 km_policy_expired(xp, dir, 1, 0); 216 xfrm_pol_put(xp); 217 } 218 219 static struct flow_cache_object *xfrm_policy_flo_get(struct flow_cache_object *flo) 220 { 221 struct xfrm_policy *pol = container_of(flo, struct xfrm_policy, flo); 222 223 if (unlikely(pol->walk.dead)) 224 flo = NULL; 225 else 226 xfrm_pol_hold(pol); 227 228 return flo; 229 } 230 231 static int xfrm_policy_flo_check(struct flow_cache_object *flo) 232 { 233 struct xfrm_policy *pol = container_of(flo, struct xfrm_policy, flo); 234 235 return !pol->walk.dead; 236 } 237 238 static void xfrm_policy_flo_delete(struct flow_cache_object *flo) 239 { 240 xfrm_pol_put(container_of(flo, struct xfrm_policy, flo)); 241 } 242 243 static const struct flow_cache_ops xfrm_policy_fc_ops = { 244 .get = xfrm_policy_flo_get, 245 .check = xfrm_policy_flo_check, 246 .delete = xfrm_policy_flo_delete, 247 }; 248 249 /* Allocate xfrm_policy. Not used here, it is supposed to be used by pfkeyv2 250 * SPD calls. 251 */ 252 253 struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp) 254 { 255 struct xfrm_policy *policy; 256 257 policy = kzalloc(sizeof(struct xfrm_policy), gfp); 258 259 if (policy) { 260 write_pnet(&policy->xp_net, net); 261 INIT_LIST_HEAD(&policy->walk.all); 262 INIT_HLIST_NODE(&policy->bydst); 263 INIT_HLIST_NODE(&policy->byidx); 264 rwlock_init(&policy->lock); 265 atomic_set(&policy->refcnt, 1); 266 setup_timer(&policy->timer, xfrm_policy_timer, 267 (unsigned long)policy); 268 policy->flo.ops = &xfrm_policy_fc_ops; 269 } 270 return policy; 271 } 272 EXPORT_SYMBOL(xfrm_policy_alloc); 273 274 /* Destroy xfrm_policy: descendant resources must be released to this moment. */ 275 276 void xfrm_policy_destroy(struct xfrm_policy *policy) 277 { 278 BUG_ON(!policy->walk.dead); 279 280 if (del_timer(&policy->timer)) 281 BUG(); 282 283 security_xfrm_policy_free(policy->security); 284 kfree(policy); 285 } 286 EXPORT_SYMBOL(xfrm_policy_destroy); 287 288 /* Rule must be locked. Release descentant resources, announce 289 * entry dead. The rule must be unlinked from lists to the moment. 290 */ 291 292 static void xfrm_policy_kill(struct xfrm_policy *policy) 293 { 294 policy->walk.dead = 1; 295 296 atomic_inc(&policy->genid); 297 298 if (del_timer(&policy->timer)) 299 xfrm_pol_put(policy); 300 301 xfrm_pol_put(policy); 302 } 303 304 static unsigned int xfrm_policy_hashmax __read_mostly = 1 * 1024 * 1024; 305 306 static inline unsigned int idx_hash(struct net *net, u32 index) 307 { 308 return __idx_hash(index, net->xfrm.policy_idx_hmask); 309 } 310 311 static struct hlist_head *policy_hash_bysel(struct net *net, struct xfrm_selector *sel, unsigned short family, int dir) 312 { 313 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; 314 unsigned int hash = __sel_hash(sel, family, hmask); 315 316 return (hash == hmask + 1 ? 317 &net->xfrm.policy_inexact[dir] : 318 net->xfrm.policy_bydst[dir].table + hash); 319 } 320 321 static struct hlist_head *policy_hash_direct(struct net *net, xfrm_address_t *daddr, xfrm_address_t *saddr, unsigned short family, int dir) 322 { 323 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; 324 unsigned int hash = __addr_hash(daddr, saddr, family, hmask); 325 326 return net->xfrm.policy_bydst[dir].table + hash; 327 } 328 329 static void xfrm_dst_hash_transfer(struct hlist_head *list, 330 struct hlist_head *ndsttable, 331 unsigned int nhashmask) 332 { 333 struct hlist_node *entry, *tmp, *entry0 = NULL; 334 struct xfrm_policy *pol; 335 unsigned int h0 = 0; 336 337 redo: 338 hlist_for_each_entry_safe(pol, entry, tmp, list, bydst) { 339 unsigned int h; 340 341 h = __addr_hash(&pol->selector.daddr, &pol->selector.saddr, 342 pol->family, nhashmask); 343 if (!entry0) { 344 hlist_del(entry); 345 hlist_add_head(&pol->bydst, ndsttable+h); 346 h0 = h; 347 } else { 348 if (h != h0) 349 continue; 350 hlist_del(entry); 351 hlist_add_after(entry0, &pol->bydst); 352 } 353 entry0 = entry; 354 } 355 if (!hlist_empty(list)) { 356 entry0 = NULL; 357 goto redo; 358 } 359 } 360 361 static void xfrm_idx_hash_transfer(struct hlist_head *list, 362 struct hlist_head *nidxtable, 363 unsigned int nhashmask) 364 { 365 struct hlist_node *entry, *tmp; 366 struct xfrm_policy *pol; 367 368 hlist_for_each_entry_safe(pol, entry, tmp, list, byidx) { 369 unsigned int h; 370 371 h = __idx_hash(pol->index, nhashmask); 372 hlist_add_head(&pol->byidx, nidxtable+h); 373 } 374 } 375 376 static unsigned long xfrm_new_hash_mask(unsigned int old_hmask) 377 { 378 return ((old_hmask + 1) << 1) - 1; 379 } 380 381 static void xfrm_bydst_resize(struct net *net, int dir) 382 { 383 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; 384 unsigned int nhashmask = xfrm_new_hash_mask(hmask); 385 unsigned int nsize = (nhashmask + 1) * sizeof(struct hlist_head); 386 struct hlist_head *odst = net->xfrm.policy_bydst[dir].table; 387 struct hlist_head *ndst = xfrm_hash_alloc(nsize); 388 int i; 389 390 if (!ndst) 391 return; 392 393 write_lock_bh(&xfrm_policy_lock); 394 395 for (i = hmask; i >= 0; i--) 396 xfrm_dst_hash_transfer(odst + i, ndst, nhashmask); 397 398 net->xfrm.policy_bydst[dir].table = ndst; 399 net->xfrm.policy_bydst[dir].hmask = nhashmask; 400 401 write_unlock_bh(&xfrm_policy_lock); 402 403 xfrm_hash_free(odst, (hmask + 1) * sizeof(struct hlist_head)); 404 } 405 406 static void xfrm_byidx_resize(struct net *net, int total) 407 { 408 unsigned int hmask = net->xfrm.policy_idx_hmask; 409 unsigned int nhashmask = xfrm_new_hash_mask(hmask); 410 unsigned int nsize = (nhashmask + 1) * sizeof(struct hlist_head); 411 struct hlist_head *oidx = net->xfrm.policy_byidx; 412 struct hlist_head *nidx = xfrm_hash_alloc(nsize); 413 int i; 414 415 if (!nidx) 416 return; 417 418 write_lock_bh(&xfrm_policy_lock); 419 420 for (i = hmask; i >= 0; i--) 421 xfrm_idx_hash_transfer(oidx + i, nidx, nhashmask); 422 423 net->xfrm.policy_byidx = nidx; 424 net->xfrm.policy_idx_hmask = nhashmask; 425 426 write_unlock_bh(&xfrm_policy_lock); 427 428 xfrm_hash_free(oidx, (hmask + 1) * sizeof(struct hlist_head)); 429 } 430 431 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total) 432 { 433 unsigned int cnt = net->xfrm.policy_count[dir]; 434 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; 435 436 if (total) 437 *total += cnt; 438 439 if ((hmask + 1) < xfrm_policy_hashmax && 440 cnt > hmask) 441 return 1; 442 443 return 0; 444 } 445 446 static inline int xfrm_byidx_should_resize(struct net *net, int total) 447 { 448 unsigned int hmask = net->xfrm.policy_idx_hmask; 449 450 if ((hmask + 1) < xfrm_policy_hashmax && 451 total > hmask) 452 return 1; 453 454 return 0; 455 } 456 457 void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si) 458 { 459 read_lock_bh(&xfrm_policy_lock); 460 si->incnt = net->xfrm.policy_count[XFRM_POLICY_IN]; 461 si->outcnt = net->xfrm.policy_count[XFRM_POLICY_OUT]; 462 si->fwdcnt = net->xfrm.policy_count[XFRM_POLICY_FWD]; 463 si->inscnt = net->xfrm.policy_count[XFRM_POLICY_IN+XFRM_POLICY_MAX]; 464 si->outscnt = net->xfrm.policy_count[XFRM_POLICY_OUT+XFRM_POLICY_MAX]; 465 si->fwdscnt = net->xfrm.policy_count[XFRM_POLICY_FWD+XFRM_POLICY_MAX]; 466 si->spdhcnt = net->xfrm.policy_idx_hmask; 467 si->spdhmcnt = xfrm_policy_hashmax; 468 read_unlock_bh(&xfrm_policy_lock); 469 } 470 EXPORT_SYMBOL(xfrm_spd_getinfo); 471 472 static DEFINE_MUTEX(hash_resize_mutex); 473 static void xfrm_hash_resize(struct work_struct *work) 474 { 475 struct net *net = container_of(work, struct net, xfrm.policy_hash_work); 476 int dir, total; 477 478 mutex_lock(&hash_resize_mutex); 479 480 total = 0; 481 for (dir = 0; dir < XFRM_POLICY_MAX * 2; dir++) { 482 if (xfrm_bydst_should_resize(net, dir, &total)) 483 xfrm_bydst_resize(net, dir); 484 } 485 if (xfrm_byidx_should_resize(net, total)) 486 xfrm_byidx_resize(net, total); 487 488 mutex_unlock(&hash_resize_mutex); 489 } 490 491 /* Generate new index... KAME seems to generate them ordered by cost 492 * of an absolute inpredictability of ordering of rules. This will not pass. */ 493 static u32 xfrm_gen_index(struct net *net, int dir) 494 { 495 static u32 idx_generator; 496 497 for (;;) { 498 struct hlist_node *entry; 499 struct hlist_head *list; 500 struct xfrm_policy *p; 501 u32 idx; 502 int found; 503 504 idx = (idx_generator | dir); 505 idx_generator += 8; 506 if (idx == 0) 507 idx = 8; 508 list = net->xfrm.policy_byidx + idx_hash(net, idx); 509 found = 0; 510 hlist_for_each_entry(p, entry, list, byidx) { 511 if (p->index == idx) { 512 found = 1; 513 break; 514 } 515 } 516 if (!found) 517 return idx; 518 } 519 } 520 521 static inline int selector_cmp(struct xfrm_selector *s1, struct xfrm_selector *s2) 522 { 523 u32 *p1 = (u32 *) s1; 524 u32 *p2 = (u32 *) s2; 525 int len = sizeof(struct xfrm_selector) / sizeof(u32); 526 int i; 527 528 for (i = 0; i < len; i++) { 529 if (p1[i] != p2[i]) 530 return 1; 531 } 532 533 return 0; 534 } 535 536 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) 537 { 538 struct net *net = xp_net(policy); 539 struct xfrm_policy *pol; 540 struct xfrm_policy *delpol; 541 struct hlist_head *chain; 542 struct hlist_node *entry, *newpos; 543 u32 mark = policy->mark.v & policy->mark.m; 544 545 write_lock_bh(&xfrm_policy_lock); 546 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); 547 delpol = NULL; 548 newpos = NULL; 549 hlist_for_each_entry(pol, entry, chain, bydst) { 550 if (pol->type == policy->type && 551 !selector_cmp(&pol->selector, &policy->selector) && 552 (mark & pol->mark.m) == pol->mark.v && 553 xfrm_sec_ctx_match(pol->security, policy->security) && 554 !WARN_ON(delpol)) { 555 if (excl) { 556 write_unlock_bh(&xfrm_policy_lock); 557 return -EEXIST; 558 } 559 delpol = pol; 560 if (policy->priority > pol->priority) 561 continue; 562 } else if (policy->priority >= pol->priority) { 563 newpos = &pol->bydst; 564 continue; 565 } 566 if (delpol) 567 break; 568 } 569 if (newpos) 570 hlist_add_after(newpos, &policy->bydst); 571 else 572 hlist_add_head(&policy->bydst, chain); 573 xfrm_pol_hold(policy); 574 net->xfrm.policy_count[dir]++; 575 atomic_inc(&flow_cache_genid); 576 if (delpol) 577 __xfrm_policy_unlink(delpol, dir); 578 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir); 579 hlist_add_head(&policy->byidx, net->xfrm.policy_byidx+idx_hash(net, policy->index)); 580 policy->curlft.add_time = get_seconds(); 581 policy->curlft.use_time = 0; 582 if (!mod_timer(&policy->timer, jiffies + HZ)) 583 xfrm_pol_hold(policy); 584 list_add(&policy->walk.all, &net->xfrm.policy_all); 585 write_unlock_bh(&xfrm_policy_lock); 586 587 if (delpol) 588 xfrm_policy_kill(delpol); 589 else if (xfrm_bydst_should_resize(net, dir, NULL)) 590 schedule_work(&net->xfrm.policy_hash_work); 591 592 return 0; 593 } 594 EXPORT_SYMBOL(xfrm_policy_insert); 595 596 struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, 597 int dir, struct xfrm_selector *sel, 598 struct xfrm_sec_ctx *ctx, int delete, 599 int *err) 600 { 601 struct xfrm_policy *pol, *ret; 602 struct hlist_head *chain; 603 struct hlist_node *entry; 604 605 *err = 0; 606 write_lock_bh(&xfrm_policy_lock); 607 chain = policy_hash_bysel(net, sel, sel->family, dir); 608 ret = NULL; 609 hlist_for_each_entry(pol, entry, chain, bydst) { 610 if (pol->type == type && 611 (mark & pol->mark.m) == pol->mark.v && 612 !selector_cmp(sel, &pol->selector) && 613 xfrm_sec_ctx_match(ctx, pol->security)) { 614 xfrm_pol_hold(pol); 615 if (delete) { 616 *err = security_xfrm_policy_delete( 617 pol->security); 618 if (*err) { 619 write_unlock_bh(&xfrm_policy_lock); 620 return pol; 621 } 622 __xfrm_policy_unlink(pol, dir); 623 } 624 ret = pol; 625 break; 626 } 627 } 628 write_unlock_bh(&xfrm_policy_lock); 629 630 if (ret && delete) 631 xfrm_policy_kill(ret); 632 return ret; 633 } 634 EXPORT_SYMBOL(xfrm_policy_bysel_ctx); 635 636 struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8 type, 637 int dir, u32 id, int delete, int *err) 638 { 639 struct xfrm_policy *pol, *ret; 640 struct hlist_head *chain; 641 struct hlist_node *entry; 642 643 *err = -ENOENT; 644 if (xfrm_policy_id2dir(id) != dir) 645 return NULL; 646 647 *err = 0; 648 write_lock_bh(&xfrm_policy_lock); 649 chain = net->xfrm.policy_byidx + idx_hash(net, id); 650 ret = NULL; 651 hlist_for_each_entry(pol, entry, chain, byidx) { 652 if (pol->type == type && pol->index == id && 653 (mark & pol->mark.m) == pol->mark.v) { 654 xfrm_pol_hold(pol); 655 if (delete) { 656 *err = security_xfrm_policy_delete( 657 pol->security); 658 if (*err) { 659 write_unlock_bh(&xfrm_policy_lock); 660 return pol; 661 } 662 __xfrm_policy_unlink(pol, dir); 663 } 664 ret = pol; 665 break; 666 } 667 } 668 write_unlock_bh(&xfrm_policy_lock); 669 670 if (ret && delete) 671 xfrm_policy_kill(ret); 672 return ret; 673 } 674 EXPORT_SYMBOL(xfrm_policy_byid); 675 676 #ifdef CONFIG_SECURITY_NETWORK_XFRM 677 static inline int 678 xfrm_policy_flush_secctx_check(struct net *net, u8 type, struct xfrm_audit *audit_info) 679 { 680 int dir, err = 0; 681 682 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { 683 struct xfrm_policy *pol; 684 struct hlist_node *entry; 685 int i; 686 687 hlist_for_each_entry(pol, entry, 688 &net->xfrm.policy_inexact[dir], bydst) { 689 if (pol->type != type) 690 continue; 691 err = security_xfrm_policy_delete(pol->security); 692 if (err) { 693 xfrm_audit_policy_delete(pol, 0, 694 audit_info->loginuid, 695 audit_info->sessionid, 696 audit_info->secid); 697 return err; 698 } 699 } 700 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { 701 hlist_for_each_entry(pol, entry, 702 net->xfrm.policy_bydst[dir].table + i, 703 bydst) { 704 if (pol->type != type) 705 continue; 706 err = security_xfrm_policy_delete( 707 pol->security); 708 if (err) { 709 xfrm_audit_policy_delete(pol, 0, 710 audit_info->loginuid, 711 audit_info->sessionid, 712 audit_info->secid); 713 return err; 714 } 715 } 716 } 717 } 718 return err; 719 } 720 #else 721 static inline int 722 xfrm_policy_flush_secctx_check(struct net *net, u8 type, struct xfrm_audit *audit_info) 723 { 724 return 0; 725 } 726 #endif 727 728 int xfrm_policy_flush(struct net *net, u8 type, struct xfrm_audit *audit_info) 729 { 730 int dir, err = 0, cnt = 0; 731 732 write_lock_bh(&xfrm_policy_lock); 733 734 err = xfrm_policy_flush_secctx_check(net, type, audit_info); 735 if (err) 736 goto out; 737 738 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { 739 struct xfrm_policy *pol; 740 struct hlist_node *entry; 741 int i; 742 743 again1: 744 hlist_for_each_entry(pol, entry, 745 &net->xfrm.policy_inexact[dir], bydst) { 746 if (pol->type != type) 747 continue; 748 __xfrm_policy_unlink(pol, dir); 749 write_unlock_bh(&xfrm_policy_lock); 750 cnt++; 751 752 xfrm_audit_policy_delete(pol, 1, audit_info->loginuid, 753 audit_info->sessionid, 754 audit_info->secid); 755 756 xfrm_policy_kill(pol); 757 758 write_lock_bh(&xfrm_policy_lock); 759 goto again1; 760 } 761 762 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { 763 again2: 764 hlist_for_each_entry(pol, entry, 765 net->xfrm.policy_bydst[dir].table + i, 766 bydst) { 767 if (pol->type != type) 768 continue; 769 __xfrm_policy_unlink(pol, dir); 770 write_unlock_bh(&xfrm_policy_lock); 771 cnt++; 772 773 xfrm_audit_policy_delete(pol, 1, 774 audit_info->loginuid, 775 audit_info->sessionid, 776 audit_info->secid); 777 xfrm_policy_kill(pol); 778 779 write_lock_bh(&xfrm_policy_lock); 780 goto again2; 781 } 782 } 783 784 } 785 if (!cnt) 786 err = -ESRCH; 787 out: 788 write_unlock_bh(&xfrm_policy_lock); 789 return err; 790 } 791 EXPORT_SYMBOL(xfrm_policy_flush); 792 793 int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk, 794 int (*func)(struct xfrm_policy *, int, int, void*), 795 void *data) 796 { 797 struct xfrm_policy *pol; 798 struct xfrm_policy_walk_entry *x; 799 int error = 0; 800 801 if (walk->type >= XFRM_POLICY_TYPE_MAX && 802 walk->type != XFRM_POLICY_TYPE_ANY) 803 return -EINVAL; 804 805 if (list_empty(&walk->walk.all) && walk->seq != 0) 806 return 0; 807 808 write_lock_bh(&xfrm_policy_lock); 809 if (list_empty(&walk->walk.all)) 810 x = list_first_entry(&net->xfrm.policy_all, struct xfrm_policy_walk_entry, all); 811 else 812 x = list_entry(&walk->walk.all, struct xfrm_policy_walk_entry, all); 813 list_for_each_entry_from(x, &net->xfrm.policy_all, all) { 814 if (x->dead) 815 continue; 816 pol = container_of(x, struct xfrm_policy, walk); 817 if (walk->type != XFRM_POLICY_TYPE_ANY && 818 walk->type != pol->type) 819 continue; 820 error = func(pol, xfrm_policy_id2dir(pol->index), 821 walk->seq, data); 822 if (error) { 823 list_move_tail(&walk->walk.all, &x->all); 824 goto out; 825 } 826 walk->seq++; 827 } 828 if (walk->seq == 0) { 829 error = -ENOENT; 830 goto out; 831 } 832 list_del_init(&walk->walk.all); 833 out: 834 write_unlock_bh(&xfrm_policy_lock); 835 return error; 836 } 837 EXPORT_SYMBOL(xfrm_policy_walk); 838 839 void xfrm_policy_walk_init(struct xfrm_policy_walk *walk, u8 type) 840 { 841 INIT_LIST_HEAD(&walk->walk.all); 842 walk->walk.dead = 1; 843 walk->type = type; 844 walk->seq = 0; 845 } 846 EXPORT_SYMBOL(xfrm_policy_walk_init); 847 848 void xfrm_policy_walk_done(struct xfrm_policy_walk *walk) 849 { 850 if (list_empty(&walk->walk.all)) 851 return; 852 853 write_lock_bh(&xfrm_policy_lock); 854 list_del(&walk->walk.all); 855 write_unlock_bh(&xfrm_policy_lock); 856 } 857 EXPORT_SYMBOL(xfrm_policy_walk_done); 858 859 /* 860 * Find policy to apply to this flow. 861 * 862 * Returns 0 if policy found, else an -errno. 863 */ 864 static int xfrm_policy_match(struct xfrm_policy *pol, struct flowi *fl, 865 u8 type, u16 family, int dir) 866 { 867 struct xfrm_selector *sel = &pol->selector; 868 int match, ret = -ESRCH; 869 870 if (pol->family != family || 871 (fl->mark & pol->mark.m) != pol->mark.v || 872 pol->type != type) 873 return ret; 874 875 match = xfrm_selector_match(sel, fl, family); 876 if (match) 877 ret = security_xfrm_policy_lookup(pol->security, fl->secid, 878 dir); 879 880 return ret; 881 } 882 883 static struct xfrm_policy *xfrm_policy_lookup_bytype(struct net *net, u8 type, 884 struct flowi *fl, 885 u16 family, u8 dir) 886 { 887 int err; 888 struct xfrm_policy *pol, *ret; 889 xfrm_address_t *daddr, *saddr; 890 struct hlist_node *entry; 891 struct hlist_head *chain; 892 u32 priority = ~0U; 893 894 daddr = xfrm_flowi_daddr(fl, family); 895 saddr = xfrm_flowi_saddr(fl, family); 896 if (unlikely(!daddr || !saddr)) 897 return NULL; 898 899 read_lock_bh(&xfrm_policy_lock); 900 chain = policy_hash_direct(net, daddr, saddr, family, dir); 901 ret = NULL; 902 hlist_for_each_entry(pol, entry, chain, bydst) { 903 err = xfrm_policy_match(pol, fl, type, family, dir); 904 if (err) { 905 if (err == -ESRCH) 906 continue; 907 else { 908 ret = ERR_PTR(err); 909 goto fail; 910 } 911 } else { 912 ret = pol; 913 priority = ret->priority; 914 break; 915 } 916 } 917 chain = &net->xfrm.policy_inexact[dir]; 918 hlist_for_each_entry(pol, entry, chain, bydst) { 919 err = xfrm_policy_match(pol, fl, type, family, dir); 920 if (err) { 921 if (err == -ESRCH) 922 continue; 923 else { 924 ret = ERR_PTR(err); 925 goto fail; 926 } 927 } else if (pol->priority < priority) { 928 ret = pol; 929 break; 930 } 931 } 932 if (ret) 933 xfrm_pol_hold(ret); 934 fail: 935 read_unlock_bh(&xfrm_policy_lock); 936 937 return ret; 938 } 939 940 static struct xfrm_policy * 941 __xfrm_policy_lookup(struct net *net, struct flowi *fl, u16 family, u8 dir) 942 { 943 #ifdef CONFIG_XFRM_SUB_POLICY 944 struct xfrm_policy *pol; 945 946 pol = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_SUB, fl, family, dir); 947 if (pol != NULL) 948 return pol; 949 #endif 950 return xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, fl, family, dir); 951 } 952 953 static struct flow_cache_object * 954 xfrm_policy_lookup(struct net *net, struct flowi *fl, u16 family, 955 u8 dir, struct flow_cache_object *old_obj, void *ctx) 956 { 957 struct xfrm_policy *pol; 958 959 if (old_obj) 960 xfrm_pol_put(container_of(old_obj, struct xfrm_policy, flo)); 961 962 pol = __xfrm_policy_lookup(net, fl, family, dir); 963 if (IS_ERR_OR_NULL(pol)) 964 return ERR_CAST(pol); 965 966 /* Resolver returns two references: 967 * one for cache and one for caller of flow_cache_lookup() */ 968 xfrm_pol_hold(pol); 969 970 return &pol->flo; 971 } 972 973 static inline int policy_to_flow_dir(int dir) 974 { 975 if (XFRM_POLICY_IN == FLOW_DIR_IN && 976 XFRM_POLICY_OUT == FLOW_DIR_OUT && 977 XFRM_POLICY_FWD == FLOW_DIR_FWD) 978 return dir; 979 switch (dir) { 980 default: 981 case XFRM_POLICY_IN: 982 return FLOW_DIR_IN; 983 case XFRM_POLICY_OUT: 984 return FLOW_DIR_OUT; 985 case XFRM_POLICY_FWD: 986 return FLOW_DIR_FWD; 987 } 988 } 989 990 static struct xfrm_policy *xfrm_sk_policy_lookup(struct sock *sk, int dir, struct flowi *fl) 991 { 992 struct xfrm_policy *pol; 993 994 read_lock_bh(&xfrm_policy_lock); 995 if ((pol = sk->sk_policy[dir]) != NULL) { 996 int match = xfrm_selector_match(&pol->selector, fl, 997 sk->sk_family); 998 int err = 0; 999 1000 if (match) { 1001 if ((sk->sk_mark & pol->mark.m) != pol->mark.v) { 1002 pol = NULL; 1003 goto out; 1004 } 1005 err = security_xfrm_policy_lookup(pol->security, 1006 fl->secid, 1007 policy_to_flow_dir(dir)); 1008 if (!err) 1009 xfrm_pol_hold(pol); 1010 else if (err == -ESRCH) 1011 pol = NULL; 1012 else 1013 pol = ERR_PTR(err); 1014 } else 1015 pol = NULL; 1016 } 1017 out: 1018 read_unlock_bh(&xfrm_policy_lock); 1019 return pol; 1020 } 1021 1022 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir) 1023 { 1024 struct net *net = xp_net(pol); 1025 struct hlist_head *chain = policy_hash_bysel(net, &pol->selector, 1026 pol->family, dir); 1027 1028 list_add(&pol->walk.all, &net->xfrm.policy_all); 1029 hlist_add_head(&pol->bydst, chain); 1030 hlist_add_head(&pol->byidx, net->xfrm.policy_byidx+idx_hash(net, pol->index)); 1031 net->xfrm.policy_count[dir]++; 1032 xfrm_pol_hold(pol); 1033 1034 if (xfrm_bydst_should_resize(net, dir, NULL)) 1035 schedule_work(&net->xfrm.policy_hash_work); 1036 } 1037 1038 static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol, 1039 int dir) 1040 { 1041 struct net *net = xp_net(pol); 1042 1043 if (hlist_unhashed(&pol->bydst)) 1044 return NULL; 1045 1046 hlist_del(&pol->bydst); 1047 hlist_del(&pol->byidx); 1048 list_del(&pol->walk.all); 1049 net->xfrm.policy_count[dir]--; 1050 1051 return pol; 1052 } 1053 1054 int xfrm_policy_delete(struct xfrm_policy *pol, int dir) 1055 { 1056 write_lock_bh(&xfrm_policy_lock); 1057 pol = __xfrm_policy_unlink(pol, dir); 1058 write_unlock_bh(&xfrm_policy_lock); 1059 if (pol) { 1060 xfrm_policy_kill(pol); 1061 return 0; 1062 } 1063 return -ENOENT; 1064 } 1065 EXPORT_SYMBOL(xfrm_policy_delete); 1066 1067 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol) 1068 { 1069 struct net *net = xp_net(pol); 1070 struct xfrm_policy *old_pol; 1071 1072 #ifdef CONFIG_XFRM_SUB_POLICY 1073 if (pol && pol->type != XFRM_POLICY_TYPE_MAIN) 1074 return -EINVAL; 1075 #endif 1076 1077 write_lock_bh(&xfrm_policy_lock); 1078 old_pol = sk->sk_policy[dir]; 1079 sk->sk_policy[dir] = pol; 1080 if (pol) { 1081 pol->curlft.add_time = get_seconds(); 1082 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir); 1083 __xfrm_policy_link(pol, XFRM_POLICY_MAX+dir); 1084 } 1085 if (old_pol) 1086 /* Unlinking succeeds always. This is the only function 1087 * allowed to delete or replace socket policy. 1088 */ 1089 __xfrm_policy_unlink(old_pol, XFRM_POLICY_MAX+dir); 1090 write_unlock_bh(&xfrm_policy_lock); 1091 1092 if (old_pol) { 1093 xfrm_policy_kill(old_pol); 1094 } 1095 return 0; 1096 } 1097 1098 static struct xfrm_policy *clone_policy(struct xfrm_policy *old, int dir) 1099 { 1100 struct xfrm_policy *newp = xfrm_policy_alloc(xp_net(old), GFP_ATOMIC); 1101 1102 if (newp) { 1103 newp->selector = old->selector; 1104 if (security_xfrm_policy_clone(old->security, 1105 &newp->security)) { 1106 kfree(newp); 1107 return NULL; /* ENOMEM */ 1108 } 1109 newp->lft = old->lft; 1110 newp->curlft = old->curlft; 1111 newp->mark = old->mark; 1112 newp->action = old->action; 1113 newp->flags = old->flags; 1114 newp->xfrm_nr = old->xfrm_nr; 1115 newp->index = old->index; 1116 newp->type = old->type; 1117 memcpy(newp->xfrm_vec, old->xfrm_vec, 1118 newp->xfrm_nr*sizeof(struct xfrm_tmpl)); 1119 write_lock_bh(&xfrm_policy_lock); 1120 __xfrm_policy_link(newp, XFRM_POLICY_MAX+dir); 1121 write_unlock_bh(&xfrm_policy_lock); 1122 xfrm_pol_put(newp); 1123 } 1124 return newp; 1125 } 1126 1127 int __xfrm_sk_clone_policy(struct sock *sk) 1128 { 1129 struct xfrm_policy *p0 = sk->sk_policy[0], 1130 *p1 = sk->sk_policy[1]; 1131 1132 sk->sk_policy[0] = sk->sk_policy[1] = NULL; 1133 if (p0 && (sk->sk_policy[0] = clone_policy(p0, 0)) == NULL) 1134 return -ENOMEM; 1135 if (p1 && (sk->sk_policy[1] = clone_policy(p1, 1)) == NULL) 1136 return -ENOMEM; 1137 return 0; 1138 } 1139 1140 static int 1141 xfrm_get_saddr(struct net *net, xfrm_address_t *local, xfrm_address_t *remote, 1142 unsigned short family) 1143 { 1144 int err; 1145 struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family); 1146 1147 if (unlikely(afinfo == NULL)) 1148 return -EINVAL; 1149 err = afinfo->get_saddr(net, local, remote); 1150 xfrm_policy_put_afinfo(afinfo); 1151 return err; 1152 } 1153 1154 /* Resolve list of templates for the flow, given policy. */ 1155 1156 static int 1157 xfrm_tmpl_resolve_one(struct xfrm_policy *policy, struct flowi *fl, 1158 struct xfrm_state **xfrm, 1159 unsigned short family) 1160 { 1161 struct net *net = xp_net(policy); 1162 int nx; 1163 int i, error; 1164 xfrm_address_t *daddr = xfrm_flowi_daddr(fl, family); 1165 xfrm_address_t *saddr = xfrm_flowi_saddr(fl, family); 1166 xfrm_address_t tmp; 1167 1168 for (nx=0, i = 0; i < policy->xfrm_nr; i++) { 1169 struct xfrm_state *x; 1170 xfrm_address_t *remote = daddr; 1171 xfrm_address_t *local = saddr; 1172 struct xfrm_tmpl *tmpl = &policy->xfrm_vec[i]; 1173 1174 if (tmpl->mode == XFRM_MODE_TUNNEL || 1175 tmpl->mode == XFRM_MODE_BEET) { 1176 remote = &tmpl->id.daddr; 1177 local = &tmpl->saddr; 1178 family = tmpl->encap_family; 1179 if (xfrm_addr_any(local, family)) { 1180 error = xfrm_get_saddr(net, &tmp, remote, family); 1181 if (error) 1182 goto fail; 1183 local = &tmp; 1184 } 1185 } 1186 1187 x = xfrm_state_find(remote, local, fl, tmpl, policy, &error, family); 1188 1189 if (x && x->km.state == XFRM_STATE_VALID) { 1190 xfrm[nx++] = x; 1191 daddr = remote; 1192 saddr = local; 1193 continue; 1194 } 1195 if (x) { 1196 error = (x->km.state == XFRM_STATE_ERROR ? 1197 -EINVAL : -EAGAIN); 1198 xfrm_state_put(x); 1199 } 1200 else if (error == -ESRCH) 1201 error = -EAGAIN; 1202 1203 if (!tmpl->optional) 1204 goto fail; 1205 } 1206 return nx; 1207 1208 fail: 1209 for (nx--; nx>=0; nx--) 1210 xfrm_state_put(xfrm[nx]); 1211 return error; 1212 } 1213 1214 static int 1215 xfrm_tmpl_resolve(struct xfrm_policy **pols, int npols, struct flowi *fl, 1216 struct xfrm_state **xfrm, 1217 unsigned short family) 1218 { 1219 struct xfrm_state *tp[XFRM_MAX_DEPTH]; 1220 struct xfrm_state **tpp = (npols > 1) ? tp : xfrm; 1221 int cnx = 0; 1222 int error; 1223 int ret; 1224 int i; 1225 1226 for (i = 0; i < npols; i++) { 1227 if (cnx + pols[i]->xfrm_nr >= XFRM_MAX_DEPTH) { 1228 error = -ENOBUFS; 1229 goto fail; 1230 } 1231 1232 ret = xfrm_tmpl_resolve_one(pols[i], fl, &tpp[cnx], family); 1233 if (ret < 0) { 1234 error = ret; 1235 goto fail; 1236 } else 1237 cnx += ret; 1238 } 1239 1240 /* found states are sorted for outbound processing */ 1241 if (npols > 1) 1242 xfrm_state_sort(xfrm, tpp, cnx, family); 1243 1244 return cnx; 1245 1246 fail: 1247 for (cnx--; cnx>=0; cnx--) 1248 xfrm_state_put(tpp[cnx]); 1249 return error; 1250 1251 } 1252 1253 /* Check that the bundle accepts the flow and its components are 1254 * still valid. 1255 */ 1256 1257 static inline int xfrm_get_tos(struct flowi *fl, int family) 1258 { 1259 struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family); 1260 int tos; 1261 1262 if (!afinfo) 1263 return -EINVAL; 1264 1265 tos = afinfo->get_tos(fl); 1266 1267 xfrm_policy_put_afinfo(afinfo); 1268 1269 return tos; 1270 } 1271 1272 static struct flow_cache_object *xfrm_bundle_flo_get(struct flow_cache_object *flo) 1273 { 1274 struct xfrm_dst *xdst = container_of(flo, struct xfrm_dst, flo); 1275 struct dst_entry *dst = &xdst->u.dst; 1276 1277 if (xdst->route == NULL) { 1278 /* Dummy bundle - if it has xfrms we were not 1279 * able to build bundle as template resolution failed. 1280 * It means we need to try again resolving. */ 1281 if (xdst->num_xfrms > 0) 1282 return NULL; 1283 } else { 1284 /* Real bundle */ 1285 if (stale_bundle(dst)) 1286 return NULL; 1287 } 1288 1289 dst_hold(dst); 1290 return flo; 1291 } 1292 1293 static int xfrm_bundle_flo_check(struct flow_cache_object *flo) 1294 { 1295 struct xfrm_dst *xdst = container_of(flo, struct xfrm_dst, flo); 1296 struct dst_entry *dst = &xdst->u.dst; 1297 1298 if (!xdst->route) 1299 return 0; 1300 if (stale_bundle(dst)) 1301 return 0; 1302 1303 return 1; 1304 } 1305 1306 static void xfrm_bundle_flo_delete(struct flow_cache_object *flo) 1307 { 1308 struct xfrm_dst *xdst = container_of(flo, struct xfrm_dst, flo); 1309 struct dst_entry *dst = &xdst->u.dst; 1310 1311 dst_free(dst); 1312 } 1313 1314 static const struct flow_cache_ops xfrm_bundle_fc_ops = { 1315 .get = xfrm_bundle_flo_get, 1316 .check = xfrm_bundle_flo_check, 1317 .delete = xfrm_bundle_flo_delete, 1318 }; 1319 1320 static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family) 1321 { 1322 struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family); 1323 struct dst_ops *dst_ops; 1324 struct xfrm_dst *xdst; 1325 1326 if (!afinfo) 1327 return ERR_PTR(-EINVAL); 1328 1329 switch (family) { 1330 case AF_INET: 1331 dst_ops = &net->xfrm.xfrm4_dst_ops; 1332 break; 1333 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) 1334 case AF_INET6: 1335 dst_ops = &net->xfrm.xfrm6_dst_ops; 1336 break; 1337 #endif 1338 default: 1339 BUG(); 1340 } 1341 xdst = dst_alloc(dst_ops) ?: ERR_PTR(-ENOBUFS); 1342 xfrm_policy_put_afinfo(afinfo); 1343 1344 xdst->flo.ops = &xfrm_bundle_fc_ops; 1345 1346 return xdst; 1347 } 1348 1349 static inline int xfrm_init_path(struct xfrm_dst *path, struct dst_entry *dst, 1350 int nfheader_len) 1351 { 1352 struct xfrm_policy_afinfo *afinfo = 1353 xfrm_policy_get_afinfo(dst->ops->family); 1354 int err; 1355 1356 if (!afinfo) 1357 return -EINVAL; 1358 1359 err = afinfo->init_path(path, dst, nfheader_len); 1360 1361 xfrm_policy_put_afinfo(afinfo); 1362 1363 return err; 1364 } 1365 1366 static inline int xfrm_fill_dst(struct xfrm_dst *xdst, struct net_device *dev, 1367 struct flowi *fl) 1368 { 1369 struct xfrm_policy_afinfo *afinfo = 1370 xfrm_policy_get_afinfo(xdst->u.dst.ops->family); 1371 int err; 1372 1373 if (!afinfo) 1374 return -EINVAL; 1375 1376 err = afinfo->fill_dst(xdst, dev, fl); 1377 1378 xfrm_policy_put_afinfo(afinfo); 1379 1380 return err; 1381 } 1382 1383 1384 /* Allocate chain of dst_entry's, attach known xfrm's, calculate 1385 * all the metrics... Shortly, bundle a bundle. 1386 */ 1387 1388 static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, 1389 struct xfrm_state **xfrm, int nx, 1390 struct flowi *fl, 1391 struct dst_entry *dst) 1392 { 1393 struct net *net = xp_net(policy); 1394 unsigned long now = jiffies; 1395 struct net_device *dev; 1396 struct dst_entry *dst_prev = NULL; 1397 struct dst_entry *dst0 = NULL; 1398 int i = 0; 1399 int err; 1400 int header_len = 0; 1401 int nfheader_len = 0; 1402 int trailer_len = 0; 1403 int tos; 1404 int family = policy->selector.family; 1405 xfrm_address_t saddr, daddr; 1406 1407 xfrm_flowi_addr_get(fl, &saddr, &daddr, family); 1408 1409 tos = xfrm_get_tos(fl, family); 1410 err = tos; 1411 if (tos < 0) 1412 goto put_states; 1413 1414 dst_hold(dst); 1415 1416 for (; i < nx; i++) { 1417 struct xfrm_dst *xdst = xfrm_alloc_dst(net, family); 1418 struct dst_entry *dst1 = &xdst->u.dst; 1419 1420 err = PTR_ERR(xdst); 1421 if (IS_ERR(xdst)) { 1422 dst_release(dst); 1423 goto put_states; 1424 } 1425 1426 if (!dst_prev) 1427 dst0 = dst1; 1428 else { 1429 dst_prev->child = dst_clone(dst1); 1430 dst1->flags |= DST_NOHASH; 1431 } 1432 1433 xdst->route = dst; 1434 memcpy(&dst1->metrics, &dst->metrics, sizeof(dst->metrics)); 1435 1436 if (xfrm[i]->props.mode != XFRM_MODE_TRANSPORT) { 1437 family = xfrm[i]->props.family; 1438 dst = xfrm_dst_lookup(xfrm[i], tos, &saddr, &daddr, 1439 family); 1440 err = PTR_ERR(dst); 1441 if (IS_ERR(dst)) 1442 goto put_states; 1443 } else 1444 dst_hold(dst); 1445 1446 dst1->xfrm = xfrm[i]; 1447 xdst->xfrm_genid = xfrm[i]->genid; 1448 1449 dst1->obsolete = -1; 1450 dst1->flags |= DST_HOST; 1451 dst1->lastuse = now; 1452 1453 dst1->input = dst_discard; 1454 dst1->output = xfrm[i]->outer_mode->afinfo->output; 1455 1456 dst1->next = dst_prev; 1457 dst_prev = dst1; 1458 1459 header_len += xfrm[i]->props.header_len; 1460 if (xfrm[i]->type->flags & XFRM_TYPE_NON_FRAGMENT) 1461 nfheader_len += xfrm[i]->props.header_len; 1462 trailer_len += xfrm[i]->props.trailer_len; 1463 } 1464 1465 dst_prev->child = dst; 1466 dst0->path = dst; 1467 1468 err = -ENODEV; 1469 dev = dst->dev; 1470 if (!dev) 1471 goto free_dst; 1472 1473 /* Copy neighbour for reachability confirmation */ 1474 dst0->neighbour = neigh_clone(dst->neighbour); 1475 1476 xfrm_init_path((struct xfrm_dst *)dst0, dst, nfheader_len); 1477 xfrm_init_pmtu(dst_prev); 1478 1479 for (dst_prev = dst0; dst_prev != dst; dst_prev = dst_prev->child) { 1480 struct xfrm_dst *xdst = (struct xfrm_dst *)dst_prev; 1481 1482 err = xfrm_fill_dst(xdst, dev, fl); 1483 if (err) 1484 goto free_dst; 1485 1486 dst_prev->header_len = header_len; 1487 dst_prev->trailer_len = trailer_len; 1488 header_len -= xdst->u.dst.xfrm->props.header_len; 1489 trailer_len -= xdst->u.dst.xfrm->props.trailer_len; 1490 } 1491 1492 out: 1493 return dst0; 1494 1495 put_states: 1496 for (; i < nx; i++) 1497 xfrm_state_put(xfrm[i]); 1498 free_dst: 1499 if (dst0) 1500 dst_free(dst0); 1501 dst0 = ERR_PTR(err); 1502 goto out; 1503 } 1504 1505 static int inline 1506 xfrm_dst_alloc_copy(void **target, void *src, int size) 1507 { 1508 if (!*target) { 1509 *target = kmalloc(size, GFP_ATOMIC); 1510 if (!*target) 1511 return -ENOMEM; 1512 } 1513 memcpy(*target, src, size); 1514 return 0; 1515 } 1516 1517 static int inline 1518 xfrm_dst_update_parent(struct dst_entry *dst, struct xfrm_selector *sel) 1519 { 1520 #ifdef CONFIG_XFRM_SUB_POLICY 1521 struct xfrm_dst *xdst = (struct xfrm_dst *)dst; 1522 return xfrm_dst_alloc_copy((void **)&(xdst->partner), 1523 sel, sizeof(*sel)); 1524 #else 1525 return 0; 1526 #endif 1527 } 1528 1529 static int inline 1530 xfrm_dst_update_origin(struct dst_entry *dst, struct flowi *fl) 1531 { 1532 #ifdef CONFIG_XFRM_SUB_POLICY 1533 struct xfrm_dst *xdst = (struct xfrm_dst *)dst; 1534 return xfrm_dst_alloc_copy((void **)&(xdst->origin), fl, sizeof(*fl)); 1535 #else 1536 return 0; 1537 #endif 1538 } 1539 1540 static int xfrm_expand_policies(struct flowi *fl, u16 family, 1541 struct xfrm_policy **pols, 1542 int *num_pols, int *num_xfrms) 1543 { 1544 int i; 1545 1546 if (*num_pols == 0 || !pols[0]) { 1547 *num_pols = 0; 1548 *num_xfrms = 0; 1549 return 0; 1550 } 1551 if (IS_ERR(pols[0])) 1552 return PTR_ERR(pols[0]); 1553 1554 *num_xfrms = pols[0]->xfrm_nr; 1555 1556 #ifdef CONFIG_XFRM_SUB_POLICY 1557 if (pols[0] && pols[0]->action == XFRM_POLICY_ALLOW && 1558 pols[0]->type != XFRM_POLICY_TYPE_MAIN) { 1559 pols[1] = xfrm_policy_lookup_bytype(xp_net(pols[0]), 1560 XFRM_POLICY_TYPE_MAIN, 1561 fl, family, 1562 XFRM_POLICY_OUT); 1563 if (pols[1]) { 1564 if (IS_ERR(pols[1])) { 1565 xfrm_pols_put(pols, *num_pols); 1566 return PTR_ERR(pols[1]); 1567 } 1568 (*num_pols) ++; 1569 (*num_xfrms) += pols[1]->xfrm_nr; 1570 } 1571 } 1572 #endif 1573 for (i = 0; i < *num_pols; i++) { 1574 if (pols[i]->action != XFRM_POLICY_ALLOW) { 1575 *num_xfrms = -1; 1576 break; 1577 } 1578 } 1579 1580 return 0; 1581 1582 } 1583 1584 static struct xfrm_dst * 1585 xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols, 1586 struct flowi *fl, u16 family, 1587 struct dst_entry *dst_orig) 1588 { 1589 struct net *net = xp_net(pols[0]); 1590 struct xfrm_state *xfrm[XFRM_MAX_DEPTH]; 1591 struct dst_entry *dst; 1592 struct xfrm_dst *xdst; 1593 int err; 1594 1595 /* Try to instantiate a bundle */ 1596 err = xfrm_tmpl_resolve(pols, num_pols, fl, xfrm, family); 1597 if (err <= 0) { 1598 if (err != 0 && err != -EAGAIN) 1599 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); 1600 return ERR_PTR(err); 1601 } 1602 1603 dst = xfrm_bundle_create(pols[0], xfrm, err, fl, dst_orig); 1604 if (IS_ERR(dst)) { 1605 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLEGENERROR); 1606 return ERR_CAST(dst); 1607 } 1608 1609 xdst = (struct xfrm_dst *)dst; 1610 xdst->num_xfrms = err; 1611 if (num_pols > 1) 1612 err = xfrm_dst_update_parent(dst, &pols[1]->selector); 1613 else 1614 err = xfrm_dst_update_origin(dst, fl); 1615 if (unlikely(err)) { 1616 dst_free(dst); 1617 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLECHECKERROR); 1618 return ERR_PTR(err); 1619 } 1620 1621 xdst->num_pols = num_pols; 1622 memcpy(xdst->pols, pols, sizeof(struct xfrm_policy*) * num_pols); 1623 xdst->policy_genid = atomic_read(&pols[0]->genid); 1624 1625 return xdst; 1626 } 1627 1628 static struct flow_cache_object * 1629 xfrm_bundle_lookup(struct net *net, struct flowi *fl, u16 family, u8 dir, 1630 struct flow_cache_object *oldflo, void *ctx) 1631 { 1632 struct dst_entry *dst_orig = (struct dst_entry *)ctx; 1633 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX]; 1634 struct xfrm_dst *xdst, *new_xdst; 1635 int num_pols = 0, num_xfrms = 0, i, err, pol_dead; 1636 1637 /* Check if the policies from old bundle are usable */ 1638 xdst = NULL; 1639 if (oldflo) { 1640 xdst = container_of(oldflo, struct xfrm_dst, flo); 1641 num_pols = xdst->num_pols; 1642 num_xfrms = xdst->num_xfrms; 1643 pol_dead = 0; 1644 for (i = 0; i < num_pols; i++) { 1645 pols[i] = xdst->pols[i]; 1646 pol_dead |= pols[i]->walk.dead; 1647 } 1648 if (pol_dead) { 1649 dst_free(&xdst->u.dst); 1650 xdst = NULL; 1651 num_pols = 0; 1652 num_xfrms = 0; 1653 oldflo = NULL; 1654 } 1655 } 1656 1657 /* Resolve policies to use if we couldn't get them from 1658 * previous cache entry */ 1659 if (xdst == NULL) { 1660 num_pols = 1; 1661 pols[0] = __xfrm_policy_lookup(net, fl, family, dir); 1662 err = xfrm_expand_policies(fl, family, pols, 1663 &num_pols, &num_xfrms); 1664 if (err < 0) 1665 goto inc_error; 1666 if (num_pols == 0) 1667 return NULL; 1668 if (num_xfrms <= 0) 1669 goto make_dummy_bundle; 1670 } 1671 1672 new_xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family, dst_orig); 1673 if (IS_ERR(new_xdst)) { 1674 err = PTR_ERR(new_xdst); 1675 if (err != -EAGAIN) 1676 goto error; 1677 if (oldflo == NULL) 1678 goto make_dummy_bundle; 1679 dst_hold(&xdst->u.dst); 1680 return oldflo; 1681 } else if (new_xdst == NULL) { 1682 num_xfrms = 0; 1683 if (oldflo == NULL) 1684 goto make_dummy_bundle; 1685 xdst->num_xfrms = 0; 1686 dst_hold(&xdst->u.dst); 1687 return oldflo; 1688 } 1689 1690 /* Kill the previous bundle */ 1691 if (xdst) { 1692 /* The policies were stolen for newly generated bundle */ 1693 xdst->num_pols = 0; 1694 dst_free(&xdst->u.dst); 1695 } 1696 1697 /* Flow cache does not have reference, it dst_free()'s, 1698 * but we do need to return one reference for original caller */ 1699 dst_hold(&new_xdst->u.dst); 1700 return &new_xdst->flo; 1701 1702 make_dummy_bundle: 1703 /* We found policies, but there's no bundles to instantiate: 1704 * either because the policy blocks, has no transformations or 1705 * we could not build template (no xfrm_states).*/ 1706 xdst = xfrm_alloc_dst(net, family); 1707 if (IS_ERR(xdst)) { 1708 xfrm_pols_put(pols, num_pols); 1709 return ERR_CAST(xdst); 1710 } 1711 xdst->num_pols = num_pols; 1712 xdst->num_xfrms = num_xfrms; 1713 memcpy(xdst->pols, pols, sizeof(struct xfrm_policy*) * num_pols); 1714 1715 dst_hold(&xdst->u.dst); 1716 return &xdst->flo; 1717 1718 inc_error: 1719 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); 1720 error: 1721 if (xdst != NULL) 1722 dst_free(&xdst->u.dst); 1723 else 1724 xfrm_pols_put(pols, num_pols); 1725 return ERR_PTR(err); 1726 } 1727 1728 /* Main function: finds/creates a bundle for given flow. 1729 * 1730 * At the moment we eat a raw IP route. Mostly to speed up lookups 1731 * on interfaces with disabled IPsec. 1732 */ 1733 int __xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl, 1734 struct sock *sk, int flags) 1735 { 1736 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX]; 1737 struct flow_cache_object *flo; 1738 struct xfrm_dst *xdst; 1739 struct dst_entry *dst, *dst_orig = *dst_p, *route; 1740 u16 family = dst_orig->ops->family; 1741 u8 dir = policy_to_flow_dir(XFRM_POLICY_OUT); 1742 int i, err, num_pols, num_xfrms = 0, drop_pols = 0; 1743 1744 restart: 1745 dst = NULL; 1746 xdst = NULL; 1747 route = NULL; 1748 1749 if (sk && sk->sk_policy[XFRM_POLICY_OUT]) { 1750 num_pols = 1; 1751 pols[0] = xfrm_sk_policy_lookup(sk, XFRM_POLICY_OUT, fl); 1752 err = xfrm_expand_policies(fl, family, pols, 1753 &num_pols, &num_xfrms); 1754 if (err < 0) 1755 goto dropdst; 1756 1757 if (num_pols) { 1758 if (num_xfrms <= 0) { 1759 drop_pols = num_pols; 1760 goto no_transform; 1761 } 1762 1763 xdst = xfrm_resolve_and_create_bundle( 1764 pols, num_pols, fl, 1765 family, dst_orig); 1766 if (IS_ERR(xdst)) { 1767 xfrm_pols_put(pols, num_pols); 1768 err = PTR_ERR(xdst); 1769 goto dropdst; 1770 } else if (xdst == NULL) { 1771 num_xfrms = 0; 1772 drop_pols = num_pols; 1773 goto no_transform; 1774 } 1775 1776 spin_lock_bh(&xfrm_policy_sk_bundle_lock); 1777 xdst->u.dst.next = xfrm_policy_sk_bundles; 1778 xfrm_policy_sk_bundles = &xdst->u.dst; 1779 spin_unlock_bh(&xfrm_policy_sk_bundle_lock); 1780 1781 route = xdst->route; 1782 } 1783 } 1784 1785 if (xdst == NULL) { 1786 /* To accelerate a bit... */ 1787 if ((dst_orig->flags & DST_NOXFRM) || 1788 !net->xfrm.policy_count[XFRM_POLICY_OUT]) 1789 goto nopol; 1790 1791 flo = flow_cache_lookup(net, fl, family, dir, 1792 xfrm_bundle_lookup, dst_orig); 1793 if (flo == NULL) 1794 goto nopol; 1795 if (IS_ERR(flo)) { 1796 err = PTR_ERR(flo); 1797 goto dropdst; 1798 } 1799 xdst = container_of(flo, struct xfrm_dst, flo); 1800 1801 num_pols = xdst->num_pols; 1802 num_xfrms = xdst->num_xfrms; 1803 memcpy(pols, xdst->pols, sizeof(struct xfrm_policy*) * num_pols); 1804 route = xdst->route; 1805 } 1806 1807 dst = &xdst->u.dst; 1808 if (route == NULL && num_xfrms > 0) { 1809 /* The only case when xfrm_bundle_lookup() returns a 1810 * bundle with null route, is when the template could 1811 * not be resolved. It means policies are there, but 1812 * bundle could not be created, since we don't yet 1813 * have the xfrm_state's. We need to wait for KM to 1814 * negotiate new SA's or bail out with error.*/ 1815 if (net->xfrm.sysctl_larval_drop) { 1816 /* EREMOTE tells the caller to generate 1817 * a one-shot blackhole route. */ 1818 dst_release(dst); 1819 xfrm_pols_put(pols, drop_pols); 1820 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); 1821 return -EREMOTE; 1822 } 1823 if (flags & XFRM_LOOKUP_WAIT) { 1824 DECLARE_WAITQUEUE(wait, current); 1825 1826 add_wait_queue(&net->xfrm.km_waitq, &wait); 1827 set_current_state(TASK_INTERRUPTIBLE); 1828 schedule(); 1829 set_current_state(TASK_RUNNING); 1830 remove_wait_queue(&net->xfrm.km_waitq, &wait); 1831 1832 if (!signal_pending(current)) { 1833 dst_release(dst); 1834 goto restart; 1835 } 1836 1837 err = -ERESTART; 1838 } else 1839 err = -EAGAIN; 1840 1841 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); 1842 goto error; 1843 } 1844 1845 no_transform: 1846 if (num_pols == 0) 1847 goto nopol; 1848 1849 if ((flags & XFRM_LOOKUP_ICMP) && 1850 !(pols[0]->flags & XFRM_POLICY_ICMP)) { 1851 err = -ENOENT; 1852 goto error; 1853 } 1854 1855 for (i = 0; i < num_pols; i++) 1856 pols[i]->curlft.use_time = get_seconds(); 1857 1858 if (num_xfrms < 0) { 1859 /* Prohibit the flow */ 1860 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLBLOCK); 1861 err = -EPERM; 1862 goto error; 1863 } else if (num_xfrms > 0) { 1864 /* Flow transformed */ 1865 *dst_p = dst; 1866 dst_release(dst_orig); 1867 } else { 1868 /* Flow passes untransformed */ 1869 dst_release(dst); 1870 } 1871 ok: 1872 xfrm_pols_put(pols, drop_pols); 1873 return 0; 1874 1875 nopol: 1876 if (!(flags & XFRM_LOOKUP_ICMP)) 1877 goto ok; 1878 err = -ENOENT; 1879 error: 1880 dst_release(dst); 1881 dropdst: 1882 dst_release(dst_orig); 1883 *dst_p = NULL; 1884 xfrm_pols_put(pols, drop_pols); 1885 return err; 1886 } 1887 EXPORT_SYMBOL(__xfrm_lookup); 1888 1889 int xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl, 1890 struct sock *sk, int flags) 1891 { 1892 int err = __xfrm_lookup(net, dst_p, fl, sk, flags); 1893 1894 if (err == -EREMOTE) { 1895 dst_release(*dst_p); 1896 *dst_p = NULL; 1897 err = -EAGAIN; 1898 } 1899 1900 return err; 1901 } 1902 EXPORT_SYMBOL(xfrm_lookup); 1903 1904 static inline int 1905 xfrm_secpath_reject(int idx, struct sk_buff *skb, struct flowi *fl) 1906 { 1907 struct xfrm_state *x; 1908 1909 if (!skb->sp || idx < 0 || idx >= skb->sp->len) 1910 return 0; 1911 x = skb->sp->xvec[idx]; 1912 if (!x->type->reject) 1913 return 0; 1914 return x->type->reject(x, skb, fl); 1915 } 1916 1917 /* When skb is transformed back to its "native" form, we have to 1918 * check policy restrictions. At the moment we make this in maximally 1919 * stupid way. Shame on me. :-) Of course, connected sockets must 1920 * have policy cached at them. 1921 */ 1922 1923 static inline int 1924 xfrm_state_ok(struct xfrm_tmpl *tmpl, struct xfrm_state *x, 1925 unsigned short family) 1926 { 1927 if (xfrm_state_kern(x)) 1928 return tmpl->optional && !xfrm_state_addr_cmp(tmpl, x, tmpl->encap_family); 1929 return x->id.proto == tmpl->id.proto && 1930 (x->id.spi == tmpl->id.spi || !tmpl->id.spi) && 1931 (x->props.reqid == tmpl->reqid || !tmpl->reqid) && 1932 x->props.mode == tmpl->mode && 1933 (tmpl->allalgs || (tmpl->aalgos & (1<<x->props.aalgo)) || 1934 !(xfrm_id_proto_match(tmpl->id.proto, IPSEC_PROTO_ANY))) && 1935 !(x->props.mode != XFRM_MODE_TRANSPORT && 1936 xfrm_state_addr_cmp(tmpl, x, family)); 1937 } 1938 1939 /* 1940 * 0 or more than 0 is returned when validation is succeeded (either bypass 1941 * because of optional transport mode, or next index of the mathced secpath 1942 * state with the template. 1943 * -1 is returned when no matching template is found. 1944 * Otherwise "-2 - errored_index" is returned. 1945 */ 1946 static inline int 1947 xfrm_policy_ok(struct xfrm_tmpl *tmpl, struct sec_path *sp, int start, 1948 unsigned short family) 1949 { 1950 int idx = start; 1951 1952 if (tmpl->optional) { 1953 if (tmpl->mode == XFRM_MODE_TRANSPORT) 1954 return start; 1955 } else 1956 start = -1; 1957 for (; idx < sp->len; idx++) { 1958 if (xfrm_state_ok(tmpl, sp->xvec[idx], family)) 1959 return ++idx; 1960 if (sp->xvec[idx]->props.mode != XFRM_MODE_TRANSPORT) { 1961 if (start == -1) 1962 start = -2-idx; 1963 break; 1964 } 1965 } 1966 return start; 1967 } 1968 1969 int __xfrm_decode_session(struct sk_buff *skb, struct flowi *fl, 1970 unsigned int family, int reverse) 1971 { 1972 struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family); 1973 int err; 1974 1975 if (unlikely(afinfo == NULL)) 1976 return -EAFNOSUPPORT; 1977 1978 afinfo->decode_session(skb, fl, reverse); 1979 err = security_xfrm_decode_session(skb, &fl->secid); 1980 xfrm_policy_put_afinfo(afinfo); 1981 return err; 1982 } 1983 EXPORT_SYMBOL(__xfrm_decode_session); 1984 1985 static inline int secpath_has_nontransport(struct sec_path *sp, int k, int *idxp) 1986 { 1987 for (; k < sp->len; k++) { 1988 if (sp->xvec[k]->props.mode != XFRM_MODE_TRANSPORT) { 1989 *idxp = k; 1990 return 1; 1991 } 1992 } 1993 1994 return 0; 1995 } 1996 1997 int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, 1998 unsigned short family) 1999 { 2000 struct net *net = dev_net(skb->dev); 2001 struct xfrm_policy *pol; 2002 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX]; 2003 int npols = 0; 2004 int xfrm_nr; 2005 int pi; 2006 int reverse; 2007 struct flowi fl; 2008 u8 fl_dir; 2009 int xerr_idx = -1; 2010 2011 reverse = dir & ~XFRM_POLICY_MASK; 2012 dir &= XFRM_POLICY_MASK; 2013 fl_dir = policy_to_flow_dir(dir); 2014 2015 if (__xfrm_decode_session(skb, &fl, family, reverse) < 0) { 2016 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR); 2017 return 0; 2018 } 2019 2020 nf_nat_decode_session(skb, &fl, family); 2021 2022 /* First, check used SA against their selectors. */ 2023 if (skb->sp) { 2024 int i; 2025 2026 for (i=skb->sp->len-1; i>=0; i--) { 2027 struct xfrm_state *x = skb->sp->xvec[i]; 2028 if (!xfrm_selector_match(&x->sel, &fl, family)) { 2029 XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEMISMATCH); 2030 return 0; 2031 } 2032 } 2033 } 2034 2035 pol = NULL; 2036 if (sk && sk->sk_policy[dir]) { 2037 pol = xfrm_sk_policy_lookup(sk, dir, &fl); 2038 if (IS_ERR(pol)) { 2039 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); 2040 return 0; 2041 } 2042 } 2043 2044 if (!pol) { 2045 struct flow_cache_object *flo; 2046 2047 flo = flow_cache_lookup(net, &fl, family, fl_dir, 2048 xfrm_policy_lookup, NULL); 2049 if (IS_ERR_OR_NULL(flo)) 2050 pol = ERR_CAST(flo); 2051 else 2052 pol = container_of(flo, struct xfrm_policy, flo); 2053 } 2054 2055 if (IS_ERR(pol)) { 2056 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); 2057 return 0; 2058 } 2059 2060 if (!pol) { 2061 if (skb->sp && secpath_has_nontransport(skb->sp, 0, &xerr_idx)) { 2062 xfrm_secpath_reject(xerr_idx, skb, &fl); 2063 XFRM_INC_STATS(net, LINUX_MIB_XFRMINNOPOLS); 2064 return 0; 2065 } 2066 return 1; 2067 } 2068 2069 pol->curlft.use_time = get_seconds(); 2070 2071 pols[0] = pol; 2072 npols ++; 2073 #ifdef CONFIG_XFRM_SUB_POLICY 2074 if (pols[0]->type != XFRM_POLICY_TYPE_MAIN) { 2075 pols[1] = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, 2076 &fl, family, 2077 XFRM_POLICY_IN); 2078 if (pols[1]) { 2079 if (IS_ERR(pols[1])) { 2080 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); 2081 return 0; 2082 } 2083 pols[1]->curlft.use_time = get_seconds(); 2084 npols ++; 2085 } 2086 } 2087 #endif 2088 2089 if (pol->action == XFRM_POLICY_ALLOW) { 2090 struct sec_path *sp; 2091 static struct sec_path dummy; 2092 struct xfrm_tmpl *tp[XFRM_MAX_DEPTH]; 2093 struct xfrm_tmpl *stp[XFRM_MAX_DEPTH]; 2094 struct xfrm_tmpl **tpp = tp; 2095 int ti = 0; 2096 int i, k; 2097 2098 if ((sp = skb->sp) == NULL) 2099 sp = &dummy; 2100 2101 for (pi = 0; pi < npols; pi++) { 2102 if (pols[pi] != pol && 2103 pols[pi]->action != XFRM_POLICY_ALLOW) { 2104 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); 2105 goto reject; 2106 } 2107 if (ti + pols[pi]->xfrm_nr >= XFRM_MAX_DEPTH) { 2108 XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR); 2109 goto reject_error; 2110 } 2111 for (i = 0; i < pols[pi]->xfrm_nr; i++) 2112 tpp[ti++] = &pols[pi]->xfrm_vec[i]; 2113 } 2114 xfrm_nr = ti; 2115 if (npols > 1) { 2116 xfrm_tmpl_sort(stp, tpp, xfrm_nr, family); 2117 tpp = stp; 2118 } 2119 2120 /* For each tunnel xfrm, find the first matching tmpl. 2121 * For each tmpl before that, find corresponding xfrm. 2122 * Order is _important_. Later we will implement 2123 * some barriers, but at the moment barriers 2124 * are implied between each two transformations. 2125 */ 2126 for (i = xfrm_nr-1, k = 0; i >= 0; i--) { 2127 k = xfrm_policy_ok(tpp[i], sp, k, family); 2128 if (k < 0) { 2129 if (k < -1) 2130 /* "-2 - errored_index" returned */ 2131 xerr_idx = -(2+k); 2132 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); 2133 goto reject; 2134 } 2135 } 2136 2137 if (secpath_has_nontransport(sp, k, &xerr_idx)) { 2138 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); 2139 goto reject; 2140 } 2141 2142 xfrm_pols_put(pols, npols); 2143 return 1; 2144 } 2145 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); 2146 2147 reject: 2148 xfrm_secpath_reject(xerr_idx, skb, &fl); 2149 reject_error: 2150 xfrm_pols_put(pols, npols); 2151 return 0; 2152 } 2153 EXPORT_SYMBOL(__xfrm_policy_check); 2154 2155 int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) 2156 { 2157 struct net *net = dev_net(skb->dev); 2158 struct flowi fl; 2159 struct dst_entry *dst; 2160 int res; 2161 2162 if (xfrm_decode_session(skb, &fl, family) < 0) { 2163 XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR); 2164 return 0; 2165 } 2166 2167 skb_dst_force(skb); 2168 dst = skb_dst(skb); 2169 2170 res = xfrm_lookup(net, &dst, &fl, NULL, 0) == 0; 2171 skb_dst_set(skb, dst); 2172 return res; 2173 } 2174 EXPORT_SYMBOL(__xfrm_route_forward); 2175 2176 /* Optimize later using cookies and generation ids. */ 2177 2178 static struct dst_entry *xfrm_dst_check(struct dst_entry *dst, u32 cookie) 2179 { 2180 /* Code (such as __xfrm4_bundle_create()) sets dst->obsolete 2181 * to "-1" to force all XFRM destinations to get validated by 2182 * dst_ops->check on every use. We do this because when a 2183 * normal route referenced by an XFRM dst is obsoleted we do 2184 * not go looking around for all parent referencing XFRM dsts 2185 * so that we can invalidate them. It is just too much work. 2186 * Instead we make the checks here on every use. For example: 2187 * 2188 * XFRM dst A --> IPv4 dst X 2189 * 2190 * X is the "xdst->route" of A (X is also the "dst->path" of A 2191 * in this example). If X is marked obsolete, "A" will not 2192 * notice. That's what we are validating here via the 2193 * stale_bundle() check. 2194 * 2195 * When a policy's bundle is pruned, we dst_free() the XFRM 2196 * dst which causes it's ->obsolete field to be set to a 2197 * positive non-zero integer. If an XFRM dst has been pruned 2198 * like this, we want to force a new route lookup. 2199 */ 2200 if (dst->obsolete < 0 && !stale_bundle(dst)) 2201 return dst; 2202 2203 return NULL; 2204 } 2205 2206 static int stale_bundle(struct dst_entry *dst) 2207 { 2208 return !xfrm_bundle_ok(NULL, (struct xfrm_dst *)dst, NULL, AF_UNSPEC, 0); 2209 } 2210 2211 void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev) 2212 { 2213 while ((dst = dst->child) && dst->xfrm && dst->dev == dev) { 2214 dst->dev = dev_net(dev)->loopback_dev; 2215 dev_hold(dst->dev); 2216 dev_put(dev); 2217 } 2218 } 2219 EXPORT_SYMBOL(xfrm_dst_ifdown); 2220 2221 static void xfrm_link_failure(struct sk_buff *skb) 2222 { 2223 /* Impossible. Such dst must be popped before reaches point of failure. */ 2224 } 2225 2226 static struct dst_entry *xfrm_negative_advice(struct dst_entry *dst) 2227 { 2228 if (dst) { 2229 if (dst->obsolete) { 2230 dst_release(dst); 2231 dst = NULL; 2232 } 2233 } 2234 return dst; 2235 } 2236 2237 static void __xfrm_garbage_collect(struct net *net) 2238 { 2239 struct dst_entry *head, *next; 2240 2241 flow_cache_flush(); 2242 2243 spin_lock_bh(&xfrm_policy_sk_bundle_lock); 2244 head = xfrm_policy_sk_bundles; 2245 xfrm_policy_sk_bundles = NULL; 2246 spin_unlock_bh(&xfrm_policy_sk_bundle_lock); 2247 2248 while (head) { 2249 next = head->next; 2250 dst_free(head); 2251 head = next; 2252 } 2253 } 2254 2255 static void xfrm_init_pmtu(struct dst_entry *dst) 2256 { 2257 do { 2258 struct xfrm_dst *xdst = (struct xfrm_dst *)dst; 2259 u32 pmtu, route_mtu_cached; 2260 2261 pmtu = dst_mtu(dst->child); 2262 xdst->child_mtu_cached = pmtu; 2263 2264 pmtu = xfrm_state_mtu(dst->xfrm, pmtu); 2265 2266 route_mtu_cached = dst_mtu(xdst->route); 2267 xdst->route_mtu_cached = route_mtu_cached; 2268 2269 if (pmtu > route_mtu_cached) 2270 pmtu = route_mtu_cached; 2271 2272 dst->metrics[RTAX_MTU-1] = pmtu; 2273 } while ((dst = dst->next)); 2274 } 2275 2276 /* Check that the bundle accepts the flow and its components are 2277 * still valid. 2278 */ 2279 2280 int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *first, 2281 struct flowi *fl, int family, int strict) 2282 { 2283 struct dst_entry *dst = &first->u.dst; 2284 struct xfrm_dst *last; 2285 u32 mtu; 2286 2287 if (!dst_check(dst->path, ((struct xfrm_dst *)dst)->path_cookie) || 2288 (dst->dev && !netif_running(dst->dev))) 2289 return 0; 2290 #ifdef CONFIG_XFRM_SUB_POLICY 2291 if (fl) { 2292 if (first->origin && !flow_cache_uli_match(first->origin, fl)) 2293 return 0; 2294 if (first->partner && 2295 !xfrm_selector_match(first->partner, fl, family)) 2296 return 0; 2297 } 2298 #endif 2299 2300 last = NULL; 2301 2302 do { 2303 struct xfrm_dst *xdst = (struct xfrm_dst *)dst; 2304 2305 if (fl && !xfrm_selector_match(&dst->xfrm->sel, fl, family)) 2306 return 0; 2307 if (fl && pol && 2308 !security_xfrm_state_pol_flow_match(dst->xfrm, pol, fl)) 2309 return 0; 2310 if (dst->xfrm->km.state != XFRM_STATE_VALID) 2311 return 0; 2312 if (xdst->xfrm_genid != dst->xfrm->genid) 2313 return 0; 2314 if (xdst->num_pols > 0 && 2315 xdst->policy_genid != atomic_read(&xdst->pols[0]->genid)) 2316 return 0; 2317 2318 if (strict && fl && 2319 !(dst->xfrm->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) && 2320 !xfrm_state_addr_flow_check(dst->xfrm, fl, family)) 2321 return 0; 2322 2323 mtu = dst_mtu(dst->child); 2324 if (xdst->child_mtu_cached != mtu) { 2325 last = xdst; 2326 xdst->child_mtu_cached = mtu; 2327 } 2328 2329 if (!dst_check(xdst->route, xdst->route_cookie)) 2330 return 0; 2331 mtu = dst_mtu(xdst->route); 2332 if (xdst->route_mtu_cached != mtu) { 2333 last = xdst; 2334 xdst->route_mtu_cached = mtu; 2335 } 2336 2337 dst = dst->child; 2338 } while (dst->xfrm); 2339 2340 if (likely(!last)) 2341 return 1; 2342 2343 mtu = last->child_mtu_cached; 2344 for (;;) { 2345 dst = &last->u.dst; 2346 2347 mtu = xfrm_state_mtu(dst->xfrm, mtu); 2348 if (mtu > last->route_mtu_cached) 2349 mtu = last->route_mtu_cached; 2350 dst->metrics[RTAX_MTU-1] = mtu; 2351 2352 if (last == first) 2353 break; 2354 2355 last = (struct xfrm_dst *)last->u.dst.next; 2356 last->child_mtu_cached = mtu; 2357 } 2358 2359 return 1; 2360 } 2361 2362 EXPORT_SYMBOL(xfrm_bundle_ok); 2363 2364 int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) 2365 { 2366 struct net *net; 2367 int err = 0; 2368 if (unlikely(afinfo == NULL)) 2369 return -EINVAL; 2370 if (unlikely(afinfo->family >= NPROTO)) 2371 return -EAFNOSUPPORT; 2372 write_lock_bh(&xfrm_policy_afinfo_lock); 2373 if (unlikely(xfrm_policy_afinfo[afinfo->family] != NULL)) 2374 err = -ENOBUFS; 2375 else { 2376 struct dst_ops *dst_ops = afinfo->dst_ops; 2377 if (likely(dst_ops->kmem_cachep == NULL)) 2378 dst_ops->kmem_cachep = xfrm_dst_cache; 2379 if (likely(dst_ops->check == NULL)) 2380 dst_ops->check = xfrm_dst_check; 2381 if (likely(dst_ops->negative_advice == NULL)) 2382 dst_ops->negative_advice = xfrm_negative_advice; 2383 if (likely(dst_ops->link_failure == NULL)) 2384 dst_ops->link_failure = xfrm_link_failure; 2385 if (likely(afinfo->garbage_collect == NULL)) 2386 afinfo->garbage_collect = __xfrm_garbage_collect; 2387 xfrm_policy_afinfo[afinfo->family] = afinfo; 2388 } 2389 write_unlock_bh(&xfrm_policy_afinfo_lock); 2390 2391 rtnl_lock(); 2392 for_each_net(net) { 2393 struct dst_ops *xfrm_dst_ops; 2394 2395 switch (afinfo->family) { 2396 case AF_INET: 2397 xfrm_dst_ops = &net->xfrm.xfrm4_dst_ops; 2398 break; 2399 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) 2400 case AF_INET6: 2401 xfrm_dst_ops = &net->xfrm.xfrm6_dst_ops; 2402 break; 2403 #endif 2404 default: 2405 BUG(); 2406 } 2407 *xfrm_dst_ops = *afinfo->dst_ops; 2408 } 2409 rtnl_unlock(); 2410 2411 return err; 2412 } 2413 EXPORT_SYMBOL(xfrm_policy_register_afinfo); 2414 2415 int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) 2416 { 2417 int err = 0; 2418 if (unlikely(afinfo == NULL)) 2419 return -EINVAL; 2420 if (unlikely(afinfo->family >= NPROTO)) 2421 return -EAFNOSUPPORT; 2422 write_lock_bh(&xfrm_policy_afinfo_lock); 2423 if (likely(xfrm_policy_afinfo[afinfo->family] != NULL)) { 2424 if (unlikely(xfrm_policy_afinfo[afinfo->family] != afinfo)) 2425 err = -EINVAL; 2426 else { 2427 struct dst_ops *dst_ops = afinfo->dst_ops; 2428 xfrm_policy_afinfo[afinfo->family] = NULL; 2429 dst_ops->kmem_cachep = NULL; 2430 dst_ops->check = NULL; 2431 dst_ops->negative_advice = NULL; 2432 dst_ops->link_failure = NULL; 2433 afinfo->garbage_collect = NULL; 2434 } 2435 } 2436 write_unlock_bh(&xfrm_policy_afinfo_lock); 2437 return err; 2438 } 2439 EXPORT_SYMBOL(xfrm_policy_unregister_afinfo); 2440 2441 static void __net_init xfrm_dst_ops_init(struct net *net) 2442 { 2443 struct xfrm_policy_afinfo *afinfo; 2444 2445 read_lock_bh(&xfrm_policy_afinfo_lock); 2446 afinfo = xfrm_policy_afinfo[AF_INET]; 2447 if (afinfo) 2448 net->xfrm.xfrm4_dst_ops = *afinfo->dst_ops; 2449 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) 2450 afinfo = xfrm_policy_afinfo[AF_INET6]; 2451 if (afinfo) 2452 net->xfrm.xfrm6_dst_ops = *afinfo->dst_ops; 2453 #endif 2454 read_unlock_bh(&xfrm_policy_afinfo_lock); 2455 } 2456 2457 static struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family) 2458 { 2459 struct xfrm_policy_afinfo *afinfo; 2460 if (unlikely(family >= NPROTO)) 2461 return NULL; 2462 read_lock(&xfrm_policy_afinfo_lock); 2463 afinfo = xfrm_policy_afinfo[family]; 2464 if (unlikely(!afinfo)) 2465 read_unlock(&xfrm_policy_afinfo_lock); 2466 return afinfo; 2467 } 2468 2469 static void xfrm_policy_put_afinfo(struct xfrm_policy_afinfo *afinfo) 2470 { 2471 read_unlock(&xfrm_policy_afinfo_lock); 2472 } 2473 2474 static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr) 2475 { 2476 struct net_device *dev = ptr; 2477 2478 switch (event) { 2479 case NETDEV_DOWN: 2480 __xfrm_garbage_collect(dev_net(dev)); 2481 } 2482 return NOTIFY_DONE; 2483 } 2484 2485 static struct notifier_block xfrm_dev_notifier = { 2486 .notifier_call = xfrm_dev_event, 2487 }; 2488 2489 #ifdef CONFIG_XFRM_STATISTICS 2490 static int __net_init xfrm_statistics_init(struct net *net) 2491 { 2492 int rv; 2493 2494 if (snmp_mib_init((void __percpu **)net->mib.xfrm_statistics, 2495 sizeof(struct linux_xfrm_mib), 2496 __alignof__(struct linux_xfrm_mib)) < 0) 2497 return -ENOMEM; 2498 rv = xfrm_proc_init(net); 2499 if (rv < 0) 2500 snmp_mib_free((void __percpu **)net->mib.xfrm_statistics); 2501 return rv; 2502 } 2503 2504 static void xfrm_statistics_fini(struct net *net) 2505 { 2506 xfrm_proc_fini(net); 2507 snmp_mib_free((void __percpu **)net->mib.xfrm_statistics); 2508 } 2509 #else 2510 static int __net_init xfrm_statistics_init(struct net *net) 2511 { 2512 return 0; 2513 } 2514 2515 static void xfrm_statistics_fini(struct net *net) 2516 { 2517 } 2518 #endif 2519 2520 static int __net_init xfrm_policy_init(struct net *net) 2521 { 2522 unsigned int hmask, sz; 2523 int dir; 2524 2525 if (net_eq(net, &init_net)) 2526 xfrm_dst_cache = kmem_cache_create("xfrm_dst_cache", 2527 sizeof(struct xfrm_dst), 2528 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, 2529 NULL); 2530 2531 hmask = 8 - 1; 2532 sz = (hmask+1) * sizeof(struct hlist_head); 2533 2534 net->xfrm.policy_byidx = xfrm_hash_alloc(sz); 2535 if (!net->xfrm.policy_byidx) 2536 goto out_byidx; 2537 net->xfrm.policy_idx_hmask = hmask; 2538 2539 for (dir = 0; dir < XFRM_POLICY_MAX * 2; dir++) { 2540 struct xfrm_policy_hash *htab; 2541 2542 net->xfrm.policy_count[dir] = 0; 2543 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); 2544 2545 htab = &net->xfrm.policy_bydst[dir]; 2546 htab->table = xfrm_hash_alloc(sz); 2547 if (!htab->table) 2548 goto out_bydst; 2549 htab->hmask = hmask; 2550 } 2551 2552 INIT_LIST_HEAD(&net->xfrm.policy_all); 2553 INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize); 2554 if (net_eq(net, &init_net)) 2555 register_netdevice_notifier(&xfrm_dev_notifier); 2556 return 0; 2557 2558 out_bydst: 2559 for (dir--; dir >= 0; dir--) { 2560 struct xfrm_policy_hash *htab; 2561 2562 htab = &net->xfrm.policy_bydst[dir]; 2563 xfrm_hash_free(htab->table, sz); 2564 } 2565 xfrm_hash_free(net->xfrm.policy_byidx, sz); 2566 out_byidx: 2567 return -ENOMEM; 2568 } 2569 2570 static void xfrm_policy_fini(struct net *net) 2571 { 2572 struct xfrm_audit audit_info; 2573 unsigned int sz; 2574 int dir; 2575 2576 flush_work(&net->xfrm.policy_hash_work); 2577 #ifdef CONFIG_XFRM_SUB_POLICY 2578 audit_info.loginuid = -1; 2579 audit_info.sessionid = -1; 2580 audit_info.secid = 0; 2581 xfrm_policy_flush(net, XFRM_POLICY_TYPE_SUB, &audit_info); 2582 #endif 2583 audit_info.loginuid = -1; 2584 audit_info.sessionid = -1; 2585 audit_info.secid = 0; 2586 xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, &audit_info); 2587 2588 WARN_ON(!list_empty(&net->xfrm.policy_all)); 2589 2590 for (dir = 0; dir < XFRM_POLICY_MAX * 2; dir++) { 2591 struct xfrm_policy_hash *htab; 2592 2593 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); 2594 2595 htab = &net->xfrm.policy_bydst[dir]; 2596 sz = (htab->hmask + 1); 2597 WARN_ON(!hlist_empty(htab->table)); 2598 xfrm_hash_free(htab->table, sz); 2599 } 2600 2601 sz = (net->xfrm.policy_idx_hmask + 1) * sizeof(struct hlist_head); 2602 WARN_ON(!hlist_empty(net->xfrm.policy_byidx)); 2603 xfrm_hash_free(net->xfrm.policy_byidx, sz); 2604 } 2605 2606 static int __net_init xfrm_net_init(struct net *net) 2607 { 2608 int rv; 2609 2610 rv = xfrm_statistics_init(net); 2611 if (rv < 0) 2612 goto out_statistics; 2613 rv = xfrm_state_init(net); 2614 if (rv < 0) 2615 goto out_state; 2616 rv = xfrm_policy_init(net); 2617 if (rv < 0) 2618 goto out_policy; 2619 xfrm_dst_ops_init(net); 2620 rv = xfrm_sysctl_init(net); 2621 if (rv < 0) 2622 goto out_sysctl; 2623 return 0; 2624 2625 out_sysctl: 2626 xfrm_policy_fini(net); 2627 out_policy: 2628 xfrm_state_fini(net); 2629 out_state: 2630 xfrm_statistics_fini(net); 2631 out_statistics: 2632 return rv; 2633 } 2634 2635 static void __net_exit xfrm_net_exit(struct net *net) 2636 { 2637 xfrm_sysctl_fini(net); 2638 xfrm_policy_fini(net); 2639 xfrm_state_fini(net); 2640 xfrm_statistics_fini(net); 2641 } 2642 2643 static struct pernet_operations __net_initdata xfrm_net_ops = { 2644 .init = xfrm_net_init, 2645 .exit = xfrm_net_exit, 2646 }; 2647 2648 void __init xfrm_init(void) 2649 { 2650 register_pernet_subsys(&xfrm_net_ops); 2651 xfrm_input_init(); 2652 } 2653 2654 #ifdef CONFIG_AUDITSYSCALL 2655 static void xfrm_audit_common_policyinfo(struct xfrm_policy *xp, 2656 struct audit_buffer *audit_buf) 2657 { 2658 struct xfrm_sec_ctx *ctx = xp->security; 2659 struct xfrm_selector *sel = &xp->selector; 2660 2661 if (ctx) 2662 audit_log_format(audit_buf, " sec_alg=%u sec_doi=%u sec_obj=%s", 2663 ctx->ctx_alg, ctx->ctx_doi, ctx->ctx_str); 2664 2665 switch(sel->family) { 2666 case AF_INET: 2667 audit_log_format(audit_buf, " src=%pI4", &sel->saddr.a4); 2668 if (sel->prefixlen_s != 32) 2669 audit_log_format(audit_buf, " src_prefixlen=%d", 2670 sel->prefixlen_s); 2671 audit_log_format(audit_buf, " dst=%pI4", &sel->daddr.a4); 2672 if (sel->prefixlen_d != 32) 2673 audit_log_format(audit_buf, " dst_prefixlen=%d", 2674 sel->prefixlen_d); 2675 break; 2676 case AF_INET6: 2677 audit_log_format(audit_buf, " src=%pI6", sel->saddr.a6); 2678 if (sel->prefixlen_s != 128) 2679 audit_log_format(audit_buf, " src_prefixlen=%d", 2680 sel->prefixlen_s); 2681 audit_log_format(audit_buf, " dst=%pI6", sel->daddr.a6); 2682 if (sel->prefixlen_d != 128) 2683 audit_log_format(audit_buf, " dst_prefixlen=%d", 2684 sel->prefixlen_d); 2685 break; 2686 } 2687 } 2688 2689 void xfrm_audit_policy_add(struct xfrm_policy *xp, int result, 2690 uid_t auid, u32 sessionid, u32 secid) 2691 { 2692 struct audit_buffer *audit_buf; 2693 2694 audit_buf = xfrm_audit_start("SPD-add"); 2695 if (audit_buf == NULL) 2696 return; 2697 xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf); 2698 audit_log_format(audit_buf, " res=%u", result); 2699 xfrm_audit_common_policyinfo(xp, audit_buf); 2700 audit_log_end(audit_buf); 2701 } 2702 EXPORT_SYMBOL_GPL(xfrm_audit_policy_add); 2703 2704 void xfrm_audit_policy_delete(struct xfrm_policy *xp, int result, 2705 uid_t auid, u32 sessionid, u32 secid) 2706 { 2707 struct audit_buffer *audit_buf; 2708 2709 audit_buf = xfrm_audit_start("SPD-delete"); 2710 if (audit_buf == NULL) 2711 return; 2712 xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf); 2713 audit_log_format(audit_buf, " res=%u", result); 2714 xfrm_audit_common_policyinfo(xp, audit_buf); 2715 audit_log_end(audit_buf); 2716 } 2717 EXPORT_SYMBOL_GPL(xfrm_audit_policy_delete); 2718 #endif 2719 2720 #ifdef CONFIG_XFRM_MIGRATE 2721 static int xfrm_migrate_selector_match(struct xfrm_selector *sel_cmp, 2722 struct xfrm_selector *sel_tgt) 2723 { 2724 if (sel_cmp->proto == IPSEC_ULPROTO_ANY) { 2725 if (sel_tgt->family == sel_cmp->family && 2726 xfrm_addr_cmp(&sel_tgt->daddr, &sel_cmp->daddr, 2727 sel_cmp->family) == 0 && 2728 xfrm_addr_cmp(&sel_tgt->saddr, &sel_cmp->saddr, 2729 sel_cmp->family) == 0 && 2730 sel_tgt->prefixlen_d == sel_cmp->prefixlen_d && 2731 sel_tgt->prefixlen_s == sel_cmp->prefixlen_s) { 2732 return 1; 2733 } 2734 } else { 2735 if (memcmp(sel_tgt, sel_cmp, sizeof(*sel_tgt)) == 0) { 2736 return 1; 2737 } 2738 } 2739 return 0; 2740 } 2741 2742 static struct xfrm_policy * xfrm_migrate_policy_find(struct xfrm_selector *sel, 2743 u8 dir, u8 type) 2744 { 2745 struct xfrm_policy *pol, *ret = NULL; 2746 struct hlist_node *entry; 2747 struct hlist_head *chain; 2748 u32 priority = ~0U; 2749 2750 read_lock_bh(&xfrm_policy_lock); 2751 chain = policy_hash_direct(&init_net, &sel->daddr, &sel->saddr, sel->family, dir); 2752 hlist_for_each_entry(pol, entry, chain, bydst) { 2753 if (xfrm_migrate_selector_match(sel, &pol->selector) && 2754 pol->type == type) { 2755 ret = pol; 2756 priority = ret->priority; 2757 break; 2758 } 2759 } 2760 chain = &init_net.xfrm.policy_inexact[dir]; 2761 hlist_for_each_entry(pol, entry, chain, bydst) { 2762 if (xfrm_migrate_selector_match(sel, &pol->selector) && 2763 pol->type == type && 2764 pol->priority < priority) { 2765 ret = pol; 2766 break; 2767 } 2768 } 2769 2770 if (ret) 2771 xfrm_pol_hold(ret); 2772 2773 read_unlock_bh(&xfrm_policy_lock); 2774 2775 return ret; 2776 } 2777 2778 static int migrate_tmpl_match(struct xfrm_migrate *m, struct xfrm_tmpl *t) 2779 { 2780 int match = 0; 2781 2782 if (t->mode == m->mode && t->id.proto == m->proto && 2783 (m->reqid == 0 || t->reqid == m->reqid)) { 2784 switch (t->mode) { 2785 case XFRM_MODE_TUNNEL: 2786 case XFRM_MODE_BEET: 2787 if (xfrm_addr_cmp(&t->id.daddr, &m->old_daddr, 2788 m->old_family) == 0 && 2789 xfrm_addr_cmp(&t->saddr, &m->old_saddr, 2790 m->old_family) == 0) { 2791 match = 1; 2792 } 2793 break; 2794 case XFRM_MODE_TRANSPORT: 2795 /* in case of transport mode, template does not store 2796 any IP addresses, hence we just compare mode and 2797 protocol */ 2798 match = 1; 2799 break; 2800 default: 2801 break; 2802 } 2803 } 2804 return match; 2805 } 2806 2807 /* update endpoint address(es) of template(s) */ 2808 static int xfrm_policy_migrate(struct xfrm_policy *pol, 2809 struct xfrm_migrate *m, int num_migrate) 2810 { 2811 struct xfrm_migrate *mp; 2812 int i, j, n = 0; 2813 2814 write_lock_bh(&pol->lock); 2815 if (unlikely(pol->walk.dead)) { 2816 /* target policy has been deleted */ 2817 write_unlock_bh(&pol->lock); 2818 return -ENOENT; 2819 } 2820 2821 for (i = 0; i < pol->xfrm_nr; i++) { 2822 for (j = 0, mp = m; j < num_migrate; j++, mp++) { 2823 if (!migrate_tmpl_match(mp, &pol->xfrm_vec[i])) 2824 continue; 2825 n++; 2826 if (pol->xfrm_vec[i].mode != XFRM_MODE_TUNNEL && 2827 pol->xfrm_vec[i].mode != XFRM_MODE_BEET) 2828 continue; 2829 /* update endpoints */ 2830 memcpy(&pol->xfrm_vec[i].id.daddr, &mp->new_daddr, 2831 sizeof(pol->xfrm_vec[i].id.daddr)); 2832 memcpy(&pol->xfrm_vec[i].saddr, &mp->new_saddr, 2833 sizeof(pol->xfrm_vec[i].saddr)); 2834 pol->xfrm_vec[i].encap_family = mp->new_family; 2835 /* flush bundles */ 2836 atomic_inc(&pol->genid); 2837 } 2838 } 2839 2840 write_unlock_bh(&pol->lock); 2841 2842 if (!n) 2843 return -ENODATA; 2844 2845 return 0; 2846 } 2847 2848 static int xfrm_migrate_check(struct xfrm_migrate *m, int num_migrate) 2849 { 2850 int i, j; 2851 2852 if (num_migrate < 1 || num_migrate > XFRM_MAX_DEPTH) 2853 return -EINVAL; 2854 2855 for (i = 0; i < num_migrate; i++) { 2856 if ((xfrm_addr_cmp(&m[i].old_daddr, &m[i].new_daddr, 2857 m[i].old_family) == 0) && 2858 (xfrm_addr_cmp(&m[i].old_saddr, &m[i].new_saddr, 2859 m[i].old_family) == 0)) 2860 return -EINVAL; 2861 if (xfrm_addr_any(&m[i].new_daddr, m[i].new_family) || 2862 xfrm_addr_any(&m[i].new_saddr, m[i].new_family)) 2863 return -EINVAL; 2864 2865 /* check if there is any duplicated entry */ 2866 for (j = i + 1; j < num_migrate; j++) { 2867 if (!memcmp(&m[i].old_daddr, &m[j].old_daddr, 2868 sizeof(m[i].old_daddr)) && 2869 !memcmp(&m[i].old_saddr, &m[j].old_saddr, 2870 sizeof(m[i].old_saddr)) && 2871 m[i].proto == m[j].proto && 2872 m[i].mode == m[j].mode && 2873 m[i].reqid == m[j].reqid && 2874 m[i].old_family == m[j].old_family) 2875 return -EINVAL; 2876 } 2877 } 2878 2879 return 0; 2880 } 2881 2882 int xfrm_migrate(struct xfrm_selector *sel, u8 dir, u8 type, 2883 struct xfrm_migrate *m, int num_migrate, 2884 struct xfrm_kmaddress *k) 2885 { 2886 int i, err, nx_cur = 0, nx_new = 0; 2887 struct xfrm_policy *pol = NULL; 2888 struct xfrm_state *x, *xc; 2889 struct xfrm_state *x_cur[XFRM_MAX_DEPTH]; 2890 struct xfrm_state *x_new[XFRM_MAX_DEPTH]; 2891 struct xfrm_migrate *mp; 2892 2893 if ((err = xfrm_migrate_check(m, num_migrate)) < 0) 2894 goto out; 2895 2896 /* Stage 1 - find policy */ 2897 if ((pol = xfrm_migrate_policy_find(sel, dir, type)) == NULL) { 2898 err = -ENOENT; 2899 goto out; 2900 } 2901 2902 /* Stage 2 - find and update state(s) */ 2903 for (i = 0, mp = m; i < num_migrate; i++, mp++) { 2904 if ((x = xfrm_migrate_state_find(mp))) { 2905 x_cur[nx_cur] = x; 2906 nx_cur++; 2907 if ((xc = xfrm_state_migrate(x, mp))) { 2908 x_new[nx_new] = xc; 2909 nx_new++; 2910 } else { 2911 err = -ENODATA; 2912 goto restore_state; 2913 } 2914 } 2915 } 2916 2917 /* Stage 3 - update policy */ 2918 if ((err = xfrm_policy_migrate(pol, m, num_migrate)) < 0) 2919 goto restore_state; 2920 2921 /* Stage 4 - delete old state(s) */ 2922 if (nx_cur) { 2923 xfrm_states_put(x_cur, nx_cur); 2924 xfrm_states_delete(x_cur, nx_cur); 2925 } 2926 2927 /* Stage 5 - announce */ 2928 km_migrate(sel, dir, type, m, num_migrate, k); 2929 2930 xfrm_pol_put(pol); 2931 2932 return 0; 2933 out: 2934 return err; 2935 2936 restore_state: 2937 if (pol) 2938 xfrm_pol_put(pol); 2939 if (nx_cur) 2940 xfrm_states_put(x_cur, nx_cur); 2941 if (nx_new) 2942 xfrm_states_delete(x_new, nx_new); 2943 2944 return err; 2945 } 2946 EXPORT_SYMBOL(xfrm_migrate); 2947 #endif 2948