Lines Matching refs:xp
1322 static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut, in copy_templates() argument
1327 xp->xfrm_nr = nr; in copy_templates()
1329 struct xfrm_tmpl *t = &xp->xfrm_vec[i]; in copy_templates()
1420 static void copy_from_user_policy(struct xfrm_policy *xp, struct xfrm_userpolicy_info *p) in copy_from_user_policy() argument
1422 xp->priority = p->priority; in copy_from_user_policy()
1423 xp->index = p->index; in copy_from_user_policy()
1424 memcpy(&xp->selector, &p->sel, sizeof(xp->selector)); in copy_from_user_policy()
1425 memcpy(&xp->lft, &p->lft, sizeof(xp->lft)); in copy_from_user_policy()
1426 xp->action = p->action; in copy_from_user_policy()
1427 xp->flags = p->flags; in copy_from_user_policy()
1428 xp->family = p->sel.family; in copy_from_user_policy()
1432 static void copy_to_user_policy(struct xfrm_policy *xp, struct xfrm_userpolicy_info *p, int dir) in copy_to_user_policy() argument
1435 memcpy(&p->sel, &xp->selector, sizeof(p->sel)); in copy_to_user_policy()
1436 memcpy(&p->lft, &xp->lft, sizeof(p->lft)); in copy_to_user_policy()
1437 memcpy(&p->curlft, &xp->curlft, sizeof(p->curlft)); in copy_to_user_policy()
1438 p->priority = xp->priority; in copy_to_user_policy()
1439 p->index = xp->index; in copy_to_user_policy()
1440 p->sel.family = xp->family; in copy_to_user_policy()
1442 p->action = xp->action; in copy_to_user_policy()
1443 p->flags = xp->flags; in copy_to_user_policy()
1449 struct xfrm_policy *xp = xfrm_policy_alloc(net, GFP_KERNEL); in xfrm_policy_construct() local
1452 if (!xp) { in xfrm_policy_construct()
1457 copy_from_user_policy(xp, p); in xfrm_policy_construct()
1459 err = copy_from_user_policy_type(&xp->type, attrs); in xfrm_policy_construct()
1463 if (!(err = copy_from_user_tmpl(xp, attrs))) in xfrm_policy_construct()
1464 err = copy_from_user_sec_ctx(xp, attrs); in xfrm_policy_construct()
1468 xfrm_mark_get(attrs, &xp->mark); in xfrm_policy_construct()
1470 return xp; in xfrm_policy_construct()
1473 xp->walk.dead = 1; in xfrm_policy_construct()
1474 xfrm_policy_destroy(xp); in xfrm_policy_construct()
1483 struct xfrm_policy *xp; in xfrm_add_policy() local
1495 xp = xfrm_policy_construct(net, p, attrs, &err); in xfrm_add_policy()
1496 if (!xp) in xfrm_add_policy()
1504 err = xfrm_policy_insert(p->dir, xp, excl); in xfrm_add_policy()
1505 xfrm_audit_policy_add(xp, err ? 0 : 1, true); in xfrm_add_policy()
1508 security_xfrm_policy_free(xp->security); in xfrm_add_policy()
1509 kfree(xp); in xfrm_add_policy()
1516 km_policy_notify(xp, p->dir, &c); in xfrm_add_policy()
1518 xfrm_pol_put(xp); in xfrm_add_policy()
1523 static int copy_to_user_tmpl(struct xfrm_policy *xp, struct sk_buff *skb) in copy_to_user_tmpl() argument
1528 if (xp->xfrm_nr == 0) in copy_to_user_tmpl()
1531 for (i = 0; i < xp->xfrm_nr; i++) { in copy_to_user_tmpl()
1533 struct xfrm_tmpl *kp = &xp->xfrm_vec[i]; in copy_to_user_tmpl()
1549 sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr, vec); in copy_to_user_tmpl()
1560 static inline int copy_to_user_sec_ctx(struct xfrm_policy *xp, struct sk_buff *skb) in copy_to_user_sec_ctx() argument
1562 if (xp->security) in copy_to_user_sec_ctx()
1563 return copy_sec_ctx(xp->security, skb); in copy_to_user_sec_ctx()
1592 static int dump_one_policy(struct xfrm_policy *xp, int dir, int count, void *ptr) in dump_one_policy() argument
1607 copy_to_user_policy(xp, p, dir); in dump_one_policy()
1608 err = copy_to_user_tmpl(xp, skb); in dump_one_policy()
1610 err = copy_to_user_sec_ctx(xp, skb); in dump_one_policy()
1612 err = copy_to_user_policy_type(xp->type, skb); in dump_one_policy()
1614 err = xfrm_mark_put(skb, &xp->mark); in dump_one_policy()
1657 struct xfrm_policy *xp, in xfrm_policy_netlink() argument
1673 err = dump_one_policy(xp, dir, 0, &info); in xfrm_policy_netlink()
1686 struct xfrm_policy *xp; in xfrm_get_policy() local
1707 xp = xfrm_policy_byid(net, mark, type, p->dir, p->index, delete, &err); in xfrm_get_policy()
1724 xp = xfrm_policy_bysel_ctx(net, mark, type, p->dir, &p->sel, in xfrm_get_policy()
1728 if (xp == NULL) in xfrm_get_policy()
1734 resp_skb = xfrm_policy_netlink(skb, xp, p->dir, nlh->nlmsg_seq); in xfrm_get_policy()
1742 xfrm_audit_policy_delete(xp, err ? 0 : 1, true); in xfrm_get_policy()
1751 km_policy_notify(xp, p->dir, &c); in xfrm_get_policy()
1755 xfrm_pol_put(xp); in xfrm_get_policy()
1979 struct xfrm_policy *xp; in xfrm_add_pol_expire() local
1996 xp = xfrm_policy_byid(net, mark, type, p->dir, p->index, 0, &err); in xfrm_add_pol_expire()
2013 xp = xfrm_policy_bysel_ctx(net, mark, type, p->dir, in xfrm_add_pol_expire()
2017 if (xp == NULL) in xfrm_add_pol_expire()
2020 if (unlikely(xp->walk.dead)) in xfrm_add_pol_expire()
2025 xfrm_policy_delete(xp, p->dir); in xfrm_add_pol_expire()
2026 xfrm_audit_policy_delete(xp, 1, true); in xfrm_add_pol_expire()
2031 km_policy_expired(xp, p->dir, up->hard, nlh->nlmsg_pid); in xfrm_add_pol_expire()
2034 xfrm_pol_put(xp); in xfrm_add_pol_expire()
2076 struct xfrm_policy *xp; in xfrm_add_acquire() local
2096 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err); in xfrm_add_acquire()
2097 if (!xp) in xfrm_add_acquire()
2103 xp->mark.m = x->mark.m = mark.m; in xfrm_add_acquire()
2104 xp->mark.v = x->mark.v = mark.v; in xfrm_add_acquire()
2107 for (i = 0; i < xp->xfrm_nr; i++, ut++) { in xfrm_add_acquire()
2108 struct xfrm_tmpl *t = &xp->xfrm_vec[i]; in xfrm_add_acquire()
2116 err = km_query(x, t, xp); in xfrm_add_acquire()
2121 kfree(xp); in xfrm_add_acquire()
2682 struct xfrm_policy *xp) in xfrm_acquire_msgsize() argument
2685 + nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr) in xfrm_acquire_msgsize()
2692 struct xfrm_tmpl *xt, struct xfrm_policy *xp) in build_acquire() argument
2707 copy_to_user_policy(xp, &ua->policy, XFRM_POLICY_OUT); in build_acquire()
2713 err = copy_to_user_tmpl(xp, skb); in build_acquire()
2717 err = copy_to_user_policy_type(xp->type, skb); in build_acquire()
2719 err = xfrm_mark_put(skb, &xp->mark); in build_acquire()
2730 struct xfrm_policy *xp) in xfrm_send_acquire() argument
2735 skb = nlmsg_new(xfrm_acquire_msgsize(x, xp), GFP_ATOMIC); in xfrm_send_acquire()
2739 if (build_acquire(skb, x, xt, xp) < 0) in xfrm_send_acquire()
2754 struct xfrm_policy *xp; in xfrm_compile_policy() local
2790 xp = xfrm_policy_alloc(net, GFP_ATOMIC); in xfrm_compile_policy()
2791 if (xp == NULL) { in xfrm_compile_policy()
2796 copy_from_user_policy(xp, p); in xfrm_compile_policy()
2797 xp->type = XFRM_POLICY_TYPE_MAIN; in xfrm_compile_policy()
2798 copy_templates(xp, ut, nr); in xfrm_compile_policy()
2802 return xp; in xfrm_compile_policy()
2805 static inline size_t xfrm_polexpire_msgsize(struct xfrm_policy *xp) in xfrm_polexpire_msgsize() argument
2808 + nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr) in xfrm_polexpire_msgsize()
2809 + nla_total_size(xfrm_user_sec_ctx_size(xp->security)) in xfrm_polexpire_msgsize()
2814 static int build_polexpire(struct sk_buff *skb, struct xfrm_policy *xp, in build_polexpire() argument
2827 copy_to_user_policy(xp, &upe->pol, dir); in build_polexpire()
2828 err = copy_to_user_tmpl(xp, skb); in build_polexpire()
2830 err = copy_to_user_sec_ctx(xp, skb); in build_polexpire()
2832 err = copy_to_user_policy_type(xp->type, skb); in build_polexpire()
2834 err = xfrm_mark_put(skb, &xp->mark); in build_polexpire()
2845 static int xfrm_exp_policy_notify(struct xfrm_policy *xp, int dir, const struct km_event *c) in xfrm_exp_policy_notify() argument
2847 struct net *net = xp_net(xp); in xfrm_exp_policy_notify()
2850 skb = nlmsg_new(xfrm_polexpire_msgsize(xp), GFP_ATOMIC); in xfrm_exp_policy_notify()
2854 if (build_polexpire(skb, xp, dir, c) < 0) in xfrm_exp_policy_notify()
2860 static int xfrm_notify_policy(struct xfrm_policy *xp, int dir, const struct km_event *c) in xfrm_notify_policy() argument
2862 int len = nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr); in xfrm_notify_policy()
2863 struct net *net = xp_net(xp); in xfrm_notify_policy()
2896 id->index = xp->index; in xfrm_notify_policy()
2898 memcpy(&id->sel, &xp->selector, sizeof(id->sel)); in xfrm_notify_policy()
2908 copy_to_user_policy(xp, p, dir); in xfrm_notify_policy()
2909 err = copy_to_user_tmpl(xp, skb); in xfrm_notify_policy()
2911 err = copy_to_user_policy_type(xp->type, skb); in xfrm_notify_policy()
2913 err = xfrm_mark_put(skb, &xp->mark); in xfrm_notify_policy()
2954 static int xfrm_send_policy_notify(struct xfrm_policy *xp, int dir, const struct km_event *c) in xfrm_send_policy_notify() argument
2961 return xfrm_notify_policy(xp, dir, c); in xfrm_send_policy_notify()
2965 return xfrm_exp_policy_notify(xp, dir, c); in xfrm_send_policy_notify()