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