Lines Matching defs:xp

1863 static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut,
1868 xp->xfrm_nr = nr;
1870 struct xfrm_tmpl *t = &xp->xfrm_vec[i];
1997 static void copy_from_user_policy(struct xfrm_policy *xp, struct xfrm_userpolicy_info *p)
1999 xp->priority = p->priority;
2000 xp->index = p->index;
2001 memcpy(&xp->selector, &p->sel, sizeof(xp->selector));
2002 memcpy(&xp->lft, &p->lft, sizeof(xp->lft));
2003 xp->action = p->action;
2004 xp->flags = p->flags;
2005 xp->family = p->sel.family;
2006 /* XXX xp->share = p->share; */
2009 static void copy_to_user_policy(struct xfrm_policy *xp, struct xfrm_userpolicy_info *p, int dir)
2012 memcpy(&p->sel, &xp->selector, sizeof(p->sel));
2013 memcpy(&p->lft, &xp->lft, sizeof(p->lft));
2014 memcpy(&p->curlft, &xp->curlft, sizeof(p->curlft));
2015 p->priority = xp->priority;
2016 p->index = xp->index;
2017 p->sel.family = xp->family;
2019 p->action = xp->action;
2020 p->flags = xp->flags;
2021 p->share = XFRM_SHARE_ANY; /* XXX xp->share */
2030 struct xfrm_policy *xp = xfrm_policy_alloc(net, GFP_KERNEL);
2033 if (!xp) {
2038 copy_from_user_policy(xp, p);
2040 err = copy_from_user_policy_type(&xp->type, attrs, extack);
2044 if (!(err = copy_from_user_tmpl(xp, attrs, p->dir, extack)))
2045 err = copy_from_user_sec_ctx(xp, attrs);
2049 xfrm_mark_get(attrs, &xp->mark);
2052 xp->if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2056 err = xfrm_dev_policy_add(net, xp,
2063 return xp;
2066 xp->walk.dead = 1;
2067 xfrm_policy_destroy(xp);
2077 struct xfrm_policy *xp;
2089 xp = xfrm_policy_construct(net, p, attrs, &err, extack);
2090 if (!xp)
2098 err = xfrm_policy_insert(p->dir, xp, excl);
2099 xfrm_audit_policy_add(xp, err ? 0 : 1, true);
2102 xfrm_dev_policy_delete(xp);
2103 xfrm_dev_policy_free(xp);
2104 security_xfrm_policy_free(xp->security);
2105 kfree(xp);
2112 km_policy_notify(xp, p->dir, &c);
2114 xfrm_pol_put(xp);
2119 static int copy_to_user_tmpl(struct xfrm_policy *xp, struct sk_buff *skb)
2124 if (xp->xfrm_nr == 0)
2127 if (xp->xfrm_nr > XFRM_MAX_DEPTH)
2130 for (i = 0; i < xp->xfrm_nr; i++) {
2132 struct xfrm_tmpl *kp = &xp->xfrm_vec[i];
2148 sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr, vec);
2159 static inline int copy_to_user_sec_ctx(struct xfrm_policy *xp, struct sk_buff *skb)
2161 if (xp->security)
2162 return copy_sec_ctx(xp->security, skb);
2193 static int dump_one_policy(struct xfrm_policy *xp, int dir, int count, void *ptr)
2209 copy_to_user_policy(xp, p, dir);
2210 err = copy_to_user_tmpl(xp, skb);
2212 err = copy_to_user_sec_ctx(xp, skb);
2214 err = copy_to_user_policy_type(xp->type, skb);
2216 err = xfrm_mark_put(skb, &xp->mark);
2218 err = xfrm_if_id_put(skb, xp->if_id);
2219 if (!err && xp->xdo.dev)
2220 err = copy_user_offload(&xp->xdo, skb);
2277 struct xfrm_policy *xp,
2293 err = dump_one_policy(xp, dir, 0, &info);
2396 struct xfrm_policy *xp;
2422 xp = xfrm_policy_byid(net, &m, if_id, type, p->dir,
2440 xp = xfrm_policy_bysel_ctx(net, &m, if_id, type, p->dir,
2444 if (xp == NULL)
2450 resp_skb = xfrm_policy_netlink(skb, xp, p->dir, nlh->nlmsg_seq);
2458 xfrm_dev_policy_delete(xp);
2459 xfrm_audit_policy_delete(xp, err ? 0 : 1, true);
2468 km_policy_notify(xp, p->dir, &c);
2472 xfrm_pol_put(xp);
2719 struct xfrm_policy *xp;
2741 xp = xfrm_policy_byid(net, &m, if_id, type, p->dir, p->index,
2759 xp = xfrm_policy_bysel_ctx(net, &m, if_id, type, p->dir,
2763 if (xp == NULL)
2766 if (unlikely(xp->walk.dead))
2771 xfrm_policy_delete(xp, p->dir);
2772 xfrm_audit_policy_delete(xp, 1, true);
2774 km_policy_expired(xp, p->dir, up->hard, nlh->nlmsg_pid);
2777 xfrm_pol_put(xp);
2824 struct xfrm_policy *xp;
2847 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err, extack);
2848 if (!xp)
2854 xp->mark.m = x->mark.m = mark.m;
2855 xp->mark.v = x->mark.v = mark.v;
2858 for (i = 0; i < xp->xfrm_nr; i++, ut++) {
2859 struct xfrm_tmpl *t = &xp->xfrm_vec[i];
2867 err = km_query(x, t, xp);
2872 kfree(xp);
3564 struct xfrm_policy *xp)
3567 + nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr)
3574 struct xfrm_tmpl *xt, struct xfrm_policy *xp)
3589 copy_to_user_policy(xp, &ua->policy, XFRM_POLICY_OUT);
3595 err = copy_to_user_tmpl(xp, skb);
3599 err = copy_to_user_policy_type(xp->type, skb);
3601 err = xfrm_mark_put(skb, &xp->mark);
3603 err = xfrm_if_id_put(skb, xp->if_id);
3604 if (!err && xp->xdo.dev)
3605 err = copy_user_offload(&xp->xdo, skb);
3616 struct xfrm_policy *xp)
3622 skb = nlmsg_new(xfrm_acquire_msgsize(x, xp), GFP_ATOMIC);
3626 err = build_acquire(skb, x, xt, xp);
3641 struct xfrm_policy *xp;
3677 xp = xfrm_policy_alloc(net, GFP_ATOMIC);
3678 if (xp == NULL) {
3683 copy_from_user_policy(xp, p);
3684 xp->type = XFRM_POLICY_TYPE_MAIN;
3685 copy_templates(xp, ut, nr);
3689 return xp;
3692 static inline unsigned int xfrm_polexpire_msgsize(struct xfrm_policy *xp)
3695 + nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr)
3696 + nla_total_size(xfrm_user_sec_ctx_size(xp->security))
3701 static int build_polexpire(struct sk_buff *skb, struct xfrm_policy *xp,
3714 copy_to_user_policy(xp, &upe->pol, dir);
3715 err = copy_to_user_tmpl(xp, skb);
3717 err = copy_to_user_sec_ctx(xp, skb);
3719 err = copy_to_user_policy_type(xp->type, skb);
3721 err = xfrm_mark_put(skb, &xp->mark);
3723 err = xfrm_if_id_put(skb, xp->if_id);
3724 if (!err && xp->xdo.dev)
3725 err = copy_user_offload(&xp->xdo, skb);
3736 static int xfrm_exp_policy_notify(struct xfrm_policy *xp, int dir, const struct km_event *c)
3738 struct net *net = xp_net(xp);
3742 skb = nlmsg_new(xfrm_polexpire_msgsize(xp), GFP_ATOMIC);
3746 err = build_polexpire(skb, xp, dir, c);
3752 static int xfrm_notify_policy(struct xfrm_policy *xp, int dir, const struct km_event *c)
3754 unsigned int len = nla_total_size(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);
3755 struct net *net = xp_net(xp);
3789 id->index = xp->index;
3791 memcpy(&id->sel, &xp->selector, sizeof(id->sel));
3801 copy_to_user_policy(xp, p, dir);
3802 err = copy_to_user_tmpl(xp, skb);
3804 err = copy_to_user_policy_type(xp->type, skb);
3806 err = xfrm_mark_put(skb, &xp->mark);
3808 err = xfrm_if_id_put(skb, xp->if_id);
3809 if (!err && xp->xdo.dev)
3810 err = copy_user_offload(&xp->xdo, skb);
3851 static int xfrm_send_policy_notify(struct xfrm_policy *xp, int dir, const struct km_event *c)
3858 return xfrm_notify_policy(xp, dir, c);
3862 return xfrm_exp_policy_notify(xp, dir, c);