Lines Matching defs:attrs
38 static int verify_one_alg(struct nlattr **attrs, enum xfrm_attr_type_t type,
41 struct nlattr *rt = attrs[type];
68 static int verify_auth_trunc(struct nlattr **attrs,
71 struct nlattr *rt = attrs[XFRMA_ALG_AUTH_TRUNC];
87 static int verify_aead(struct nlattr **attrs, struct netlink_ext_ack *extack)
89 struct nlattr *rt = attrs[XFRMA_ALG_AEAD];
105 static void verify_one_addr(struct nlattr **attrs, enum xfrm_attr_type_t type,
108 struct nlattr *rt = attrs[type];
114 static inline int verify_sec_ctx_len(struct nlattr **attrs, struct netlink_ext_ack *extack)
116 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
133 struct nlattr **attrs, u8 sa_dir,
136 struct nlattr *rt = attrs[XFRMA_REPLAY_ESN_VAL];
243 struct nlattr **attrs,
247 u8 sa_dir = nla_get_u8_default(attrs[XFRMA_SA_DIR], 0);
306 if (!attrs[XFRMA_ALG_AUTH] &&
307 !attrs[XFRMA_ALG_AUTH_TRUNC]) {
312 if (attrs[XFRMA_ALG_AEAD] ||
313 attrs[XFRMA_ALG_CRYPT] ||
314 attrs[XFRMA_ALG_COMP] ||
315 attrs[XFRMA_TFCPAD]) {
322 if (attrs[XFRMA_ALG_COMP]) {
327 if (!attrs[XFRMA_ALG_AUTH] &&
328 !attrs[XFRMA_ALG_AUTH_TRUNC] &&
329 !attrs[XFRMA_ALG_CRYPT] &&
330 !attrs[XFRMA_ALG_AEAD]) {
335 if ((attrs[XFRMA_ALG_AUTH] ||
336 attrs[XFRMA_ALG_AUTH_TRUNC] ||
337 attrs[XFRMA_ALG_CRYPT]) &&
338 attrs[XFRMA_ALG_AEAD]) {
343 if (attrs[XFRMA_TFCPAD] &&
348 if ((attrs[XFRMA_IPTFS_DROP_TIME] ||
349 attrs[XFRMA_IPTFS_REORDER_WINDOW] ||
350 attrs[XFRMA_IPTFS_DONT_FRAG] ||
351 attrs[XFRMA_IPTFS_INIT_DELAY] ||
352 attrs[XFRMA_IPTFS_MAX_QSIZE] ||
353 attrs[XFRMA_IPTFS_PKT_SIZE]) &&
361 if (!attrs[XFRMA_ALG_COMP]) {
366 if (attrs[XFRMA_ALG_AEAD] ||
367 attrs[XFRMA_ALG_AUTH] ||
368 attrs[XFRMA_ALG_AUTH_TRUNC] ||
369 attrs[XFRMA_ALG_CRYPT] ||
370 attrs[XFRMA_TFCPAD]) {
384 if (attrs[XFRMA_ALG_COMP] ||
385 attrs[XFRMA_ALG_AUTH] ||
386 attrs[XFRMA_ALG_AUTH_TRUNC] ||
387 attrs[XFRMA_ALG_AEAD] ||
388 attrs[XFRMA_ALG_CRYPT] ||
389 attrs[XFRMA_ENCAP] ||
390 attrs[XFRMA_SEC_CTX] ||
391 attrs[XFRMA_TFCPAD]) {
396 if (!attrs[XFRMA_COADDR]) {
408 if ((err = verify_aead(attrs, extack)))
410 if ((err = verify_auth_trunc(attrs, extack)))
412 if ((err = verify_one_alg(attrs, XFRMA_ALG_AUTH, extack)))
414 if ((err = verify_one_alg(attrs, XFRMA_ALG_CRYPT, extack)))
416 if ((err = verify_one_alg(attrs, XFRMA_ALG_COMP, extack)))
418 if ((err = verify_sec_ctx_len(attrs, extack)))
420 if ((err = verify_replay(p, attrs, sa_dir, extack)))
448 if (attrs[XFRMA_MTIMER_THRESH]) {
449 if (!attrs[XFRMA_ENCAP]) {
488 if (attrs[XFRMA_IPTFS_DROP_TIME]) {
494 if (attrs[XFRMA_IPTFS_REORDER_WINDOW]) {
500 if (attrs[XFRMA_REPLAY_VAL]) {
503 replay = nla_data(attrs[XFRMA_REPLAY_VAL]);
521 if (attrs[XFRMA_SA_EXTRA_FLAGS]) {
522 u32 xflags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);
538 if (attrs[XFRMA_IPTFS_DONT_FRAG]) {
544 if (attrs[XFRMA_IPTFS_INIT_DELAY]) {
550 if (attrs[XFRMA_IPTFS_MAX_QSIZE]) {
556 if (attrs[XFRMA_IPTFS_PKT_SIZE]) {
563 if (!sa_dir && attrs[XFRMA_SA_PCPU]) {
827 static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs,
830 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL];
831 struct nlattr *re = update_esn ? attrs[XFRMA_REPLAY_ESN_VAL] : NULL;
832 struct nlattr *lt = attrs[XFRMA_LTIME_VAL];
833 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH];
834 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH];
835 struct nlattr *mt = attrs[XFRMA_MTIMER_THRESH];
872 static void xfrm_smark_init(struct nlattr **attrs, struct xfrm_mark *m)
874 if (attrs[XFRMA_SET_MARK]) {
875 m->v = nla_get_u32(attrs[XFRMA_SET_MARK]);
876 m->m = nla_get_u32_default(attrs[XFRMA_SET_MARK_MASK],
885 struct nlattr **attrs,
897 if (attrs[XFRMA_ENCAP]) {
898 x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
904 if (attrs[XFRMA_COADDR]) {
905 x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
911 if (attrs[XFRMA_SA_EXTRA_FLAGS])
912 x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);
914 if ((err = attach_aead(x, attrs[XFRMA_ALG_AEAD], extack)))
917 attrs[XFRMA_ALG_AUTH_TRUNC], extack)))
921 attrs[XFRMA_ALG_AUTH], extack)))
924 if ((err = attach_crypt(x, attrs[XFRMA_ALG_CRYPT], extack)))
928 attrs[XFRMA_ALG_COMP], extack)))
931 if (attrs[XFRMA_TFCPAD])
932 x->tfcpad = nla_get_u32(attrs[XFRMA_TFCPAD]);
934 xfrm_mark_get(attrs, &x->mark);
936 xfrm_smark_init(attrs, &x->props.smark);
938 if (attrs[XFRMA_IF_ID])
939 x->if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
941 if (attrs[XFRMA_SA_DIR])
942 x->dir = nla_get_u8(attrs[XFRMA_SA_DIR]);
944 if (attrs[XFRMA_NAT_KEEPALIVE_INTERVAL])
946 nla_get_u32(attrs[XFRMA_NAT_KEEPALIVE_INTERVAL]);
948 if (attrs[XFRMA_SA_PCPU]) {
949 x->pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]);
958 if (attrs[XFRMA_SEC_CTX]) {
960 nla_data(attrs[XFRMA_SEC_CTX]));
966 attrs[XFRMA_REPLAY_ESN_VAL])))
978 xfrm_update_ae_params(x, attrs, 0);
980 xfrm_set_type_offload(x, attrs[XFRMA_OFFLOAD_DEV]);
982 if (attrs[XFRMA_OFFLOAD_DEV]) {
984 nla_data(attrs[XFRMA_OFFLOAD_DEV]),
991 err = x->mode_cbs->user_init(net, x, attrs, extack);
1007 struct nlattr **attrs, struct netlink_ext_ack *extack)
1015 err = verify_newsa_info(p, attrs, extack);
1019 x = xfrm_state_construct(net, p, attrs, &err, extack);
1053 struct nlattr **attrs,
1059 u32 mark = xfrm_mark_get(attrs, &m);
1067 verify_one_addr(attrs, XFRMA_SRCADDR, &saddr);
1086 struct nlattr **attrs, struct netlink_ext_ack *extack)
1094 x = xfrm_user_state_lookup(net, p, attrs, &err);
1502 struct nlattr *attrs[XFRMA_MAX+1];
1507 err = nlmsg_parse_deprecated(cb->nlh, 0, attrs, XFRMA_MAX,
1512 if (attrs[XFRMA_ADDRESS_FILTER]) {
1513 filter = kmemdup(nla_data(attrs[XFRMA_ADDRESS_FILTER]),
1528 if (attrs[XFRMA_PROTO])
1529 proto = nla_get_u8(attrs[XFRMA_PROTO]);
1656 struct nlattr **attrs,
1664 if (attrs[XFRMA_SPD_IPV4_HTHRESH]) {
1665 struct nlattr *rta = attrs[XFRMA_SPD_IPV4_HTHRESH];
1677 if (attrs[XFRMA_SPD_IPV6_HTHRESH]) {
1678 struct nlattr *rta = attrs[XFRMA_SPD_IPV6_HTHRESH];
1710 struct nlattr **attrs,
1770 struct nlattr **attrs,
1791 struct nlattr **attrs, struct netlink_ext_ack *extack)
1799 x = xfrm_user_state_lookup(net, p, attrs, &err);
1815 struct nlattr **attrs,
1841 mark = xfrm_mark_get(attrs, &m);
1843 if (attrs[XFRMA_IF_ID])
1844 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
1846 if (attrs[XFRMA_SA_PCPU]) {
1847 pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]);
1877 if (attrs[XFRMA_SA_DIR])
1878 x->dir = nla_get_u8(attrs[XFRMA_SA_DIR]);
2003 static int copy_from_user_sec_ctx(struct xfrm_policy *pol, struct nlattr **attrs)
2005 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
2109 static int copy_from_user_tmpl(struct xfrm_policy *pol, struct nlattr **attrs,
2112 struct nlattr *rt = attrs[XFRMA_TMPL];
2130 static int copy_from_user_policy_type(u8 *tp, struct nlattr **attrs,
2133 struct nlattr *rt = attrs[XFRMA_POLICY_TYPE];
2180 struct nlattr **attrs,
2194 err = copy_from_user_policy_type(&xp->type, attrs, extack);
2198 if (!(err = copy_from_user_tmpl(xp, attrs, p->dir, extack)))
2199 err = copy_from_user_sec_ctx(xp, attrs);
2203 xfrm_mark_get(attrs, &xp->mark);
2205 if (attrs[XFRMA_IF_ID])
2206 xp->if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2209 if (attrs[XFRMA_OFFLOAD_DEV]) {
2211 nla_data(attrs[XFRMA_OFFLOAD_DEV]),
2226 struct nlattr **attrs,
2239 err = verify_sec_ctx_len(attrs, extack);
2243 xp = xfrm_policy_construct(net, p, attrs, &err, extack);
2495 struct nlattr **attrs, struct netlink_ext_ack *extack)
2516 struct nlattr **attrs, struct netlink_ext_ack *extack)
2546 struct nlattr **attrs,
2562 err = copy_from_user_policy_type(&type, attrs, extack);
2570 if (attrs[XFRMA_IF_ID])
2571 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2573 xfrm_mark_get(attrs, &m);
2579 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
2582 err = verify_sec_ctx_len(attrs, extack);
2630 struct nlattr **attrs,
2744 struct nlattr **attrs, struct netlink_ext_ack *extack)
2756 mark = xfrm_mark_get(attrs, &m);
2788 struct nlattr **attrs, struct netlink_ext_ack *extack)
2797 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL];
2798 struct nlattr *re = attrs[XFRMA_REPLAY_ESN_VAL];
2799 struct nlattr *lt = attrs[XFRMA_LTIME_VAL];
2800 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH];
2801 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH];
2814 mark = xfrm_mark_get(attrs, &m);
2830 xfrm_update_ae_params(x, attrs, 1);
2845 struct nlattr **attrs,
2853 err = copy_from_user_policy_type(&type, attrs, extack);
2874 struct nlattr **attrs,
2886 err = copy_from_user_policy_type(&type, attrs, extack);
2894 if (attrs[XFRMA_IF_ID])
2895 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
2897 xfrm_mark_get(attrs, &m);
2903 struct nlattr *rt = attrs[XFRMA_SEC_CTX];
2906 err = verify_sec_ctx_len(attrs, extack);
2941 struct nlattr **attrs,
2950 u32 mark = xfrm_mark_get(attrs, &m);
2979 struct nlattr **attrs,
2986 struct nlattr *rt = attrs[XFRMA_TMPL];
2996 xfrm_mark_get(attrs, &mark);
2998 if (attrs[XFRMA_SA_PCPU]) {
2999 x->pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]);
3008 err = verify_sec_ctx_len(attrs, extack);
3013 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err, extack);
3051 struct nlattr **attrs, int *num,
3054 struct nlattr *rt = attrs[XFRMA_MIGRATE];
3061 uk = nla_data(attrs[XFRMA_KMADDRESS]);
3095 struct nlattr **attrs, struct netlink_ext_ack *extack)
3108 if (!attrs[XFRMA_MIGRATE]) {
3113 kmp = attrs[XFRMA_KMADDRESS] ? &km : NULL;
3115 err = copy_from_user_policy_type(&type, attrs, extack);
3119 err = copy_from_user_migrate(m, kmp, attrs, &n, extack);
3126 if (attrs[XFRMA_ENCAP]) {
3127 encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
3133 if (attrs[XFRMA_IF_ID])
3134 if_id = nla_get_u32(attrs[XFRMA_IF_ID]);
3136 if (attrs[XFRMA_OFFLOAD_DEV]) {
3137 xuo = kmemdup(nla_data(attrs[XFRMA_OFFLOAD_DEV]),
3153 struct nlattr **attrs, struct netlink_ext_ack *extack)
3399 static int xfrm_reject_unused_attr(int type, struct nlattr **attrs,
3402 if (attrs[XFRMA_SA_DIR]) {
3414 if (attrs[XFRMA_SA_PCPU]) {
3435 struct nlattr *attrs[XFRMA_MAX+1];
3484 err = nlmsg_parse_deprecated(nlh, xfrm_msg_min[type], attrs,
3491 err = xfrm_reject_unused_attr((type + XFRM_MSG_BASE), attrs, extack);
3501 err = link->doit(skb, nlh, attrs, extack);