Lines Matching refs:attrs

37 static int verify_one_alg(struct nlattr **attrs, enum xfrm_attr_type_t type)
39 struct nlattr *rt = attrs[type];
63 static int verify_auth_trunc(struct nlattr **attrs)
65 struct nlattr *rt = attrs[XFRMA_ALG_AUTH_TRUNC];
79 static int verify_aead(struct nlattr **attrs)
81 struct nlattr *rt = attrs[XFRMA_ALG_AEAD];
95 static void verify_one_addr(struct nlattr **attrs, enum xfrm_attr_type_t type,
98 struct nlattr *rt = attrs[type];
104 static inline int verify_sec_ctx_len(struct nlattr **attrs)
106 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
121 struct nlattr **attrs)
123 struct nlattr *rt = attrs[XFRMA_REPLAY_ESN_VAL];
149 struct nlattr **attrs)
198 if ((!attrs[XFRMA_ALG_AUTH] &&
199 !attrs[XFRMA_ALG_AUTH_TRUNC]) ||
200 attrs[XFRMA_ALG_AEAD] ||
201 attrs[XFRMA_ALG_CRYPT] ||
202 attrs[XFRMA_ALG_COMP] ||
203 attrs[XFRMA_TFCPAD])
208 if (attrs[XFRMA_ALG_COMP])
210 if (!attrs[XFRMA_ALG_AUTH] &&
211 !attrs[XFRMA_ALG_AUTH_TRUNC] &&
212 !attrs[XFRMA_ALG_CRYPT] &&
213 !attrs[XFRMA_ALG_AEAD])
215 if ((attrs[XFRMA_ALG_AUTH] ||
216 attrs[XFRMA_ALG_AUTH_TRUNC] ||
217 attrs[XFRMA_ALG_CRYPT]) &&
218 attrs[XFRMA_ALG_AEAD])
220 if (attrs[XFRMA_TFCPAD] &&
226 if (!attrs[XFRMA_ALG_COMP] ||
227 attrs[XFRMA_ALG_AEAD] ||
228 attrs[XFRMA_ALG_AUTH] ||
229 attrs[XFRMA_ALG_AUTH_TRUNC] ||
230 attrs[XFRMA_ALG_CRYPT] ||
231 attrs[XFRMA_TFCPAD] ||
239 if (attrs[XFRMA_ALG_COMP] ||
240 attrs[XFRMA_ALG_AUTH] ||
241 attrs[XFRMA_ALG_AUTH_TRUNC] ||
242 attrs[XFRMA_ALG_AEAD] ||
243 attrs[XFRMA_ALG_CRYPT] ||
244 attrs[XFRMA_ENCAP] ||
245 attrs[XFRMA_SEC_CTX] ||
246 attrs[XFRMA_TFCPAD] ||
247 !attrs[XFRMA_COADDR])
256 if ((err = verify_aead(attrs)))
258 if ((err = verify_auth_trunc(attrs)))
260 if ((err = verify_one_alg(attrs, XFRMA_ALG_AUTH)))
262 if ((err = verify_one_alg(attrs, XFRMA_ALG_CRYPT)))
264 if ((err = verify_one_alg(attrs, XFRMA_ALG_COMP)))
266 if ((err = verify_sec_ctx_len(attrs)))
268 if ((err = verify_replay(p, attrs)))
285 if (attrs[XFRMA_MTIMER_THRESH])
286 if (!attrs[XFRMA_ENCAP])
520 static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs,
523 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL];
524 struct nlattr *re = update_esn ? attrs[XFRMA_REPLAY_ESN_VAL] : NULL;
525 struct nlattr *lt = attrs[XFRMA_LTIME_VAL];
526 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH];
527 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH];
528 struct nlattr *mt = attrs[XFRMA_MTIMER_THRESH];
565 static void xfrm_smark_init(struct nlattr **attrs, struct xfrm_mark *m)
567 if (attrs[XFRMA_SET_MARK]) {
568 m->v = nla_get_u32(attrs[XFRMA_SET_MARK]);
569 if (attrs[XFRMA_SET_MARK_MASK])
570 m->m = nla_get_u32(attrs[XFRMA_SET_MARK_MASK]);
580 struct nlattr **attrs,
591 if (attrs[XFRMA_ENCAP]) {
592 x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
598 if (attrs[XFRMA_COADDR]) {
599 x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
605 if (attrs[XFRMA_SA_EXTRA_FLAGS])
606 x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);
608 if ((err = attach_aead(x, attrs[XFRMA_ALG_AEAD])))
611 attrs[XFRMA_ALG_AUTH_TRUNC])))
615 attrs[XFRMA_ALG_AUTH])))
618 if ((err = attach_crypt(x, attrs[XFRMA_ALG_CRYPT])))
622 attrs[XFRMA_ALG_COMP])))
625 if (attrs[XFRMA_TFCPAD])
626 x->tfcpad = nla_get_u32(attrs[XFRMA_TFCPAD]);
628 xfrm_mark_get(attrs, &x->mark);
630 xfrm_smark_init(attrs, &x->props.smark);
632 if (attrs[XFRMA_IF_ID])
633 x->if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
635 err = __xfrm_init_state(x, false, attrs[XFRMA_OFFLOAD_DEV]);
639 if (attrs[XFRMA_SEC_CTX]) {
641 nla_data(attrs[XFRMA_SEC_CTX]));
647 attrs[XFRMA_REPLAY_ESN_VAL])))
659 xfrm_update_ae_params(x, attrs, 0);
662 if (attrs[XFRMA_OFFLOAD_DEV]) {
664 nla_data(attrs[XFRMA_OFFLOAD_DEV]));
680 struct nlattr **attrs)
688 err = verify_newsa_info(p, attrs);
692 x = xfrm_state_construct(net, p, attrs, &err);
726 struct nlattr **attrs,
732 u32 mark = xfrm_mark_get(attrs, &m);
740 verify_one_addr(attrs, XFRMA_SRCADDR, &saddr);
759 struct nlattr **attrs)
767 x = xfrm_user_state_lookup(net, p, attrs, &err);
1050 struct nlattr *attrs[XFRMA_MAX+1];
1055 err = nlmsg_parse_deprecated(cb->nlh, 0, attrs, XFRMA_MAX,
1060 if (attrs[XFRMA_ADDRESS_FILTER]) {
1061 filter = kmemdup(nla_data(attrs[XFRMA_ADDRESS_FILTER]),
1076 if (attrs[XFRMA_PROTO])
1077 proto = nla_get_u8(attrs[XFRMA_PROTO]);
1204 struct nlattr **attrs)
1211 if (attrs[XFRMA_SPD_IPV4_HTHRESH]) {
1212 struct nlattr *rta = attrs[XFRMA_SPD_IPV4_HTHRESH];
1220 if (attrs[XFRMA_SPD_IPV6_HTHRESH]) {
1221 struct nlattr *rta = attrs[XFRMA_SPD_IPV6_HTHRESH];
1249 struct nlattr **attrs)
1308 struct nlattr **attrs)
1328 struct nlattr **attrs)
1336 x = xfrm_user_state_lookup(net, p, attrs, &err);
1352 struct nlattr **attrs)
1376 mark = xfrm_mark_get(attrs, &m);
1378 if (attrs[XFRMA_IF_ID])
1379 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
1512 static int copy_from_user_sec_ctx(struct xfrm_policy *pol, struct nlattr **attrs)
1514 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
1602 static int copy_from_user_tmpl(struct xfrm_policy *pol, struct nlattr **attrs)
1604 struct nlattr *rt = attrs[XFRMA_TMPL];
1622 static int copy_from_user_policy_type(u8 *tp, struct nlattr **attrs)
1624 struct nlattr *rt = attrs[XFRMA_POLICY_TYPE];
1669 static struct xfrm_policy *xfrm_policy_construct(struct net *net, struct xfrm_userpolicy_info *p, struct nlattr **attrs, int *errp)
1681 err = copy_from_user_policy_type(&xp->type, attrs);
1685 if (!(err = copy_from_user_tmpl(xp, attrs)))
1686 err = copy_from_user_sec_ctx(xp, attrs);
1690 xfrm_mark_get(attrs, &xp->mark);
1692 if (attrs[XFRMA_IF_ID])
1693 xp->if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
1704 struct nlattr **attrs)
1716 err = verify_sec_ctx_len(attrs);
1720 xp = xfrm_policy_construct(net, p, attrs, &err);
1965 struct nlattr **attrs)
1986 struct nlattr **attrs)
2016 struct nlattr **attrs)
2031 err = copy_from_user_policy_type(&type, attrs);
2039 if (attrs[XFRMA_IF_ID])
2040 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2042 xfrm_mark_get(attrs, &m);
2048 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
2051 err = verify_sec_ctx_len(attrs);
2099 struct nlattr **attrs)
2199 struct nlattr **attrs)
2211 mark = xfrm_mark_get(attrs, &m);
2243 struct nlattr **attrs)
2252 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL];
2253 struct nlattr *re = attrs[XFRMA_REPLAY_ESN_VAL];
2254 struct nlattr *lt = attrs[XFRMA_LTIME_VAL];
2255 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH];
2256 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH];
2265 mark = xfrm_mark_get(attrs, &m);
2279 xfrm_update_ae_params(x, attrs, 1);
2294 struct nlattr **attrs)
2301 err = copy_from_user_policy_type(&type, attrs);
2322 struct nlattr **attrs)
2333 err = copy_from_user_policy_type(&type, attrs);
2341 if (attrs[XFRMA_IF_ID])
2342 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2344 xfrm_mark_get(attrs, &m);
2350 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
2353 err = verify_sec_ctx_len(attrs);
2388 struct nlattr **attrs)
2396 u32 mark = xfrm_mark_get(attrs, &m);
2422 struct nlattr **attrs)
2428 struct nlattr *rt = attrs[XFRMA_TMPL];
2438 xfrm_mark_get(attrs, &mark);
2443 err = verify_sec_ctx_len(attrs);
2448 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err);
2486 struct nlattr **attrs, int *num)
2488 struct nlattr *rt = attrs[XFRMA_MIGRATE];
2495 uk = nla_data(attrs[XFRMA_KMADDRESS]);
2527 struct nlattr **attrs)
2539 if (attrs[XFRMA_MIGRATE] == NULL)
2542 kmp = attrs[XFRMA_KMADDRESS] ? &km : NULL;
2544 err = copy_from_user_policy_type(&type, attrs);
2548 err = copy_from_user_migrate((struct xfrm_migrate *)m, kmp, attrs, &n);
2555 if (attrs[XFRMA_ENCAP]) {
2556 encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
2562 if (attrs[XFRMA_IF_ID])
2563 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2573 struct nlattr **attrs)
2812 struct nlattr *attrs[XFRMA_MAX+1];
2861 err = nlmsg_parse_deprecated(nlh, xfrm_msg_min[type], attrs,
2872 err = link->doit(skb, nlh, attrs);