Lines Matching +refs:link +refs:stats +refs:attrs
38 static int verify_one_alg(struct nlattr **attrs, enum xfrm_attr_type_t type, in verify_one_alg() argument
41 struct nlattr *rt = attrs[type]; in verify_one_alg()
68 static int verify_auth_trunc(struct nlattr **attrs, in verify_auth_trunc() argument
71 struct nlattr *rt = attrs[XFRMA_ALG_AUTH_TRUNC]; in verify_auth_trunc()
87 static int verify_aead(struct nlattr **attrs, struct netlink_ext_ack *extack) in verify_aead() argument
89 struct nlattr *rt = attrs[XFRMA_ALG_AEAD]; in verify_aead()
105 static void verify_one_addr(struct nlattr **attrs, enum xfrm_attr_type_t type, in verify_one_addr() argument
108 struct nlattr *rt = attrs[type]; in verify_one_addr()
114 static inline int verify_sec_ctx_len(struct nlattr **attrs, struct netlink_ext_ack *extack) in verify_sec_ctx_len() argument
116 struct nlattr *rt = attrs[XFRMA_SEC_CTX]; in verify_sec_ctx_len()
133 struct nlattr **attrs, u8 sa_dir, in verify_replay() argument
136 struct nlattr *rt = attrs[XFRMA_REPLAY_ESN_VAL]; in verify_replay()
211 struct nlattr **attrs, in verify_newsa_info() argument
215 u8 sa_dir = nla_get_u8_default(attrs[XFRMA_SA_DIR], 0); in verify_newsa_info()
274 if (!attrs[XFRMA_ALG_AUTH] && in verify_newsa_info()
275 !attrs[XFRMA_ALG_AUTH_TRUNC]) { in verify_newsa_info()
280 if (attrs[XFRMA_ALG_AEAD] || in verify_newsa_info()
281 attrs[XFRMA_ALG_CRYPT] || in verify_newsa_info()
282 attrs[XFRMA_ALG_COMP] || in verify_newsa_info()
283 attrs[XFRMA_TFCPAD]) { in verify_newsa_info()
290 if (attrs[XFRMA_ALG_COMP]) { in verify_newsa_info()
295 if (!attrs[XFRMA_ALG_AUTH] && in verify_newsa_info()
296 !attrs[XFRMA_ALG_AUTH_TRUNC] && in verify_newsa_info()
297 !attrs[XFRMA_ALG_CRYPT] && in verify_newsa_info()
298 !attrs[XFRMA_ALG_AEAD]) { in verify_newsa_info()
303 if ((attrs[XFRMA_ALG_AUTH] || in verify_newsa_info()
304 attrs[XFRMA_ALG_AUTH_TRUNC] || in verify_newsa_info()
305 attrs[XFRMA_ALG_CRYPT]) && in verify_newsa_info()
306 attrs[XFRMA_ALG_AEAD]) { in verify_newsa_info()
311 if (attrs[XFRMA_TFCPAD] && in verify_newsa_info()
316 if ((attrs[XFRMA_IPTFS_DROP_TIME] || in verify_newsa_info()
317 attrs[XFRMA_IPTFS_REORDER_WINDOW] || in verify_newsa_info()
318 attrs[XFRMA_IPTFS_DONT_FRAG] || in verify_newsa_info()
319 attrs[XFRMA_IPTFS_INIT_DELAY] || in verify_newsa_info()
320 attrs[XFRMA_IPTFS_MAX_QSIZE] || in verify_newsa_info()
321 attrs[XFRMA_IPTFS_PKT_SIZE]) && in verify_newsa_info()
329 if (!attrs[XFRMA_ALG_COMP]) { in verify_newsa_info()
334 if (attrs[XFRMA_ALG_AEAD] || in verify_newsa_info()
335 attrs[XFRMA_ALG_AUTH] || in verify_newsa_info()
336 attrs[XFRMA_ALG_AUTH_TRUNC] || in verify_newsa_info()
337 attrs[XFRMA_ALG_CRYPT] || in verify_newsa_info()
338 attrs[XFRMA_TFCPAD]) { in verify_newsa_info()
352 if (attrs[XFRMA_ALG_COMP] || in verify_newsa_info()
353 attrs[XFRMA_ALG_AUTH] || in verify_newsa_info()
354 attrs[XFRMA_ALG_AUTH_TRUNC] || in verify_newsa_info()
355 attrs[XFRMA_ALG_AEAD] || in verify_newsa_info()
356 attrs[XFRMA_ALG_CRYPT] || in verify_newsa_info()
357 attrs[XFRMA_ENCAP] || in verify_newsa_info()
358 attrs[XFRMA_SEC_CTX] || in verify_newsa_info()
359 attrs[XFRMA_TFCPAD]) { in verify_newsa_info()
364 if (!attrs[XFRMA_COADDR]) { in verify_newsa_info()
376 if ((err = verify_aead(attrs, extack))) in verify_newsa_info()
378 if ((err = verify_auth_trunc(attrs, extack))) in verify_newsa_info()
380 if ((err = verify_one_alg(attrs, XFRMA_ALG_AUTH, extack))) in verify_newsa_info()
382 if ((err = verify_one_alg(attrs, XFRMA_ALG_CRYPT, extack))) in verify_newsa_info()
384 if ((err = verify_one_alg(attrs, XFRMA_ALG_COMP, extack))) in verify_newsa_info()
386 if ((err = verify_sec_ctx_len(attrs, extack))) in verify_newsa_info()
388 if ((err = verify_replay(p, attrs, sa_dir, extack))) in verify_newsa_info()
416 if (attrs[XFRMA_MTIMER_THRESH]) { in verify_newsa_info()
417 if (!attrs[XFRMA_ENCAP]) { in verify_newsa_info()
456 if (attrs[XFRMA_IPTFS_DROP_TIME]) { in verify_newsa_info()
462 if (attrs[XFRMA_IPTFS_REORDER_WINDOW]) { in verify_newsa_info()
468 if (attrs[XFRMA_REPLAY_VAL]) { in verify_newsa_info()
471 replay = nla_data(attrs[XFRMA_REPLAY_VAL]); in verify_newsa_info()
489 if (attrs[XFRMA_SA_EXTRA_FLAGS]) { in verify_newsa_info()
490 u32 xflags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]); in verify_newsa_info()
506 if (attrs[XFRMA_IPTFS_DONT_FRAG]) { in verify_newsa_info()
512 if (attrs[XFRMA_IPTFS_INIT_DELAY]) { in verify_newsa_info()
518 if (attrs[XFRMA_IPTFS_MAX_QSIZE]) { in verify_newsa_info()
524 if (attrs[XFRMA_IPTFS_PKT_SIZE]) { in verify_newsa_info()
531 if (!sa_dir && attrs[XFRMA_SA_PCPU]) { in verify_newsa_info()
795 static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs, in xfrm_update_ae_params() argument
798 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL]; in xfrm_update_ae_params()
799 struct nlattr *re = update_esn ? attrs[XFRMA_REPLAY_ESN_VAL] : NULL; in xfrm_update_ae_params()
800 struct nlattr *lt = attrs[XFRMA_LTIME_VAL]; in xfrm_update_ae_params()
801 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH]; in xfrm_update_ae_params()
802 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH]; in xfrm_update_ae_params()
803 struct nlattr *mt = attrs[XFRMA_MTIMER_THRESH]; in xfrm_update_ae_params()
840 static void xfrm_smark_init(struct nlattr **attrs, struct xfrm_mark *m) in xfrm_smark_init() argument
842 if (attrs[XFRMA_SET_MARK]) { in xfrm_smark_init()
843 m->v = nla_get_u32(attrs[XFRMA_SET_MARK]); in xfrm_smark_init()
844 m->m = nla_get_u32_default(attrs[XFRMA_SET_MARK_MASK], in xfrm_smark_init()
853 struct nlattr **attrs, in xfrm_state_construct() argument
865 if (attrs[XFRMA_ENCAP]) { in xfrm_state_construct()
866 x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]), in xfrm_state_construct()
872 if (attrs[XFRMA_COADDR]) { in xfrm_state_construct()
873 x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]), in xfrm_state_construct()
879 if (attrs[XFRMA_SA_EXTRA_FLAGS]) in xfrm_state_construct()
880 x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]); in xfrm_state_construct()
882 if ((err = attach_aead(x, attrs[XFRMA_ALG_AEAD], extack))) in xfrm_state_construct()
885 attrs[XFRMA_ALG_AUTH_TRUNC], extack))) in xfrm_state_construct()
889 attrs[XFRMA_ALG_AUTH], extack))) in xfrm_state_construct()
892 if ((err = attach_crypt(x, attrs[XFRMA_ALG_CRYPT], extack))) in xfrm_state_construct()
896 attrs[XFRMA_ALG_COMP], extack))) in xfrm_state_construct()
899 if (attrs[XFRMA_TFCPAD]) in xfrm_state_construct()
900 x->tfcpad = nla_get_u32(attrs[XFRMA_TFCPAD]); in xfrm_state_construct()
902 xfrm_mark_get(attrs, &x->mark); in xfrm_state_construct()
904 xfrm_smark_init(attrs, &x->props.smark); in xfrm_state_construct()
906 if (attrs[XFRMA_IF_ID]) in xfrm_state_construct()
907 x->if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_state_construct()
909 if (attrs[XFRMA_SA_DIR]) in xfrm_state_construct()
910 x->dir = nla_get_u8(attrs[XFRMA_SA_DIR]); in xfrm_state_construct()
912 if (attrs[XFRMA_NAT_KEEPALIVE_INTERVAL]) in xfrm_state_construct()
914 nla_get_u32(attrs[XFRMA_NAT_KEEPALIVE_INTERVAL]); in xfrm_state_construct()
916 if (attrs[XFRMA_SA_PCPU]) { in xfrm_state_construct()
917 x->pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]); in xfrm_state_construct()
926 if (attrs[XFRMA_SEC_CTX]) { in xfrm_state_construct()
928 nla_data(attrs[XFRMA_SEC_CTX])); in xfrm_state_construct()
934 attrs[XFRMA_REPLAY_ESN_VAL]))) in xfrm_state_construct()
946 xfrm_update_ae_params(x, attrs, 0); in xfrm_state_construct()
949 if (attrs[XFRMA_OFFLOAD_DEV]) { in xfrm_state_construct()
951 nla_data(attrs[XFRMA_OFFLOAD_DEV]), in xfrm_state_construct()
958 err = x->mode_cbs->user_init(net, x, attrs, extack); in xfrm_state_construct()
974 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_add_sa() argument
982 err = verify_newsa_info(p, attrs, extack); in xfrm_add_sa()
986 x = xfrm_state_construct(net, p, attrs, &err, extack); in xfrm_add_sa()
1020 struct nlattr **attrs, in xfrm_user_state_lookup() argument
1026 u32 mark = xfrm_mark_get(attrs, &m); in xfrm_user_state_lookup()
1034 verify_one_addr(attrs, XFRMA_SRCADDR, &saddr); in xfrm_user_state_lookup()
1053 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_del_sa() argument
1061 x = xfrm_user_state_lookup(net, p, attrs, &err); in xfrm_del_sa()
1098 put_unaligned(x->stats.replay_window, &p->stats.replay_window); in copy_to_user_state()
1099 put_unaligned(x->stats.replay, &p->stats.replay); in copy_to_user_state()
1100 put_unaligned(x->stats.integrity_failed, &p->stats.integrity_failed); in copy_to_user_state()
1469 struct nlattr *attrs[XFRMA_MAX+1]; in xfrm_dump_sa() local
1474 err = nlmsg_parse_deprecated(cb->nlh, 0, attrs, XFRMA_MAX, in xfrm_dump_sa()
1479 if (attrs[XFRMA_ADDRESS_FILTER]) { in xfrm_dump_sa()
1480 filter = kmemdup(nla_data(attrs[XFRMA_ADDRESS_FILTER]), in xfrm_dump_sa()
1495 if (attrs[XFRMA_PROTO]) in xfrm_dump_sa()
1496 proto = nla_get_u8(attrs[XFRMA_PROTO]); in xfrm_dump_sa()
1623 struct nlattr **attrs, in xfrm_set_spdinfo() argument
1631 if (attrs[XFRMA_SPD_IPV4_HTHRESH]) { in xfrm_set_spdinfo()
1632 struct nlattr *rta = attrs[XFRMA_SPD_IPV4_HTHRESH]; in xfrm_set_spdinfo()
1644 if (attrs[XFRMA_SPD_IPV6_HTHRESH]) { in xfrm_set_spdinfo()
1645 struct nlattr *rta = attrs[XFRMA_SPD_IPV6_HTHRESH]; in xfrm_set_spdinfo()
1677 struct nlattr **attrs, in xfrm_get_spdinfo() argument
1737 struct nlattr **attrs, in xfrm_get_sadinfo() argument
1758 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_get_sa() argument
1766 x = xfrm_user_state_lookup(net, p, attrs, &err); in xfrm_get_sa()
1782 struct nlattr **attrs, in xfrm_alloc_userspi() argument
1808 mark = xfrm_mark_get(attrs, &m); in xfrm_alloc_userspi()
1810 if (attrs[XFRMA_IF_ID]) in xfrm_alloc_userspi()
1811 if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_alloc_userspi()
1813 if (attrs[XFRMA_SA_PCPU]) { in xfrm_alloc_userspi()
1814 pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]); in xfrm_alloc_userspi()
1844 if (attrs[XFRMA_SA_DIR]) in xfrm_alloc_userspi()
1845 x->dir = nla_get_u8(attrs[XFRMA_SA_DIR]); in xfrm_alloc_userspi()
1970 static int copy_from_user_sec_ctx(struct xfrm_policy *pol, struct nlattr **attrs) in copy_from_user_sec_ctx() argument
1972 struct nlattr *rt = attrs[XFRMA_SEC_CTX]; in copy_from_user_sec_ctx()
2076 static int copy_from_user_tmpl(struct xfrm_policy *pol, struct nlattr **attrs, in copy_from_user_tmpl() argument
2079 struct nlattr *rt = attrs[XFRMA_TMPL]; in copy_from_user_tmpl()
2097 static int copy_from_user_policy_type(u8 *tp, struct nlattr **attrs, in copy_from_user_policy_type() argument
2100 struct nlattr *rt = attrs[XFRMA_POLICY_TYPE]; in copy_from_user_policy_type()
2147 struct nlattr **attrs, in xfrm_policy_construct() argument
2161 err = copy_from_user_policy_type(&xp->type, attrs, extack); in xfrm_policy_construct()
2165 if (!(err = copy_from_user_tmpl(xp, attrs, p->dir, extack))) in xfrm_policy_construct()
2166 err = copy_from_user_sec_ctx(xp, attrs); in xfrm_policy_construct()
2170 xfrm_mark_get(attrs, &xp->mark); in xfrm_policy_construct()
2172 if (attrs[XFRMA_IF_ID]) in xfrm_policy_construct()
2173 xp->if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_policy_construct()
2176 if (attrs[XFRMA_OFFLOAD_DEV]) { in xfrm_policy_construct()
2178 nla_data(attrs[XFRMA_OFFLOAD_DEV]), in xfrm_policy_construct()
2193 struct nlattr **attrs, in xfrm_add_policy() argument
2206 err = verify_sec_ctx_len(attrs, extack); in xfrm_add_policy()
2210 xp = xfrm_policy_construct(net, p, attrs, &err, extack); in xfrm_add_policy()
2462 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_set_default() argument
2483 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_get_default() argument
2513 struct nlattr **attrs, in xfrm_get_policy() argument
2529 err = copy_from_user_policy_type(&type, attrs, extack); in xfrm_get_policy()
2537 if (attrs[XFRMA_IF_ID]) in xfrm_get_policy()
2538 if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_get_policy()
2540 xfrm_mark_get(attrs, &m); in xfrm_get_policy()
2546 struct nlattr *rt = attrs[XFRMA_SEC_CTX]; in xfrm_get_policy()
2549 err = verify_sec_ctx_len(attrs, extack); in xfrm_get_policy()
2597 struct nlattr **attrs, in xfrm_flush_sa() argument
2711 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_get_ae() argument
2723 mark = xfrm_mark_get(attrs, &m); in xfrm_get_ae()
2755 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_new_ae() argument
2764 struct nlattr *rp = attrs[XFRMA_REPLAY_VAL]; in xfrm_new_ae()
2765 struct nlattr *re = attrs[XFRMA_REPLAY_ESN_VAL]; in xfrm_new_ae()
2766 struct nlattr *lt = attrs[XFRMA_LTIME_VAL]; in xfrm_new_ae()
2767 struct nlattr *et = attrs[XFRMA_ETIMER_THRESH]; in xfrm_new_ae()
2768 struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH]; in xfrm_new_ae()
2781 mark = xfrm_mark_get(attrs, &m); in xfrm_new_ae()
2797 xfrm_update_ae_params(x, attrs, 1); in xfrm_new_ae()
2812 struct nlattr **attrs, in xfrm_flush_policy() argument
2820 err = copy_from_user_policy_type(&type, attrs, extack); in xfrm_flush_policy()
2841 struct nlattr **attrs, in xfrm_add_pol_expire() argument
2853 err = copy_from_user_policy_type(&type, attrs, extack); in xfrm_add_pol_expire()
2861 if (attrs[XFRMA_IF_ID]) in xfrm_add_pol_expire()
2862 if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_add_pol_expire()
2864 xfrm_mark_get(attrs, &m); in xfrm_add_pol_expire()
2870 struct nlattr *rt = attrs[XFRMA_SEC_CTX]; in xfrm_add_pol_expire()
2873 err = verify_sec_ctx_len(attrs, extack); in xfrm_add_pol_expire()
2908 struct nlattr **attrs, in xfrm_add_sa_expire() argument
2917 u32 mark = xfrm_mark_get(attrs, &m); in xfrm_add_sa_expire()
2946 struct nlattr **attrs, in xfrm_add_acquire() argument
2953 struct nlattr *rt = attrs[XFRMA_TMPL]; in xfrm_add_acquire()
2963 xfrm_mark_get(attrs, &mark); in xfrm_add_acquire()
2965 if (attrs[XFRMA_SA_PCPU]) { in xfrm_add_acquire()
2966 x->pcpu_num = nla_get_u32(attrs[XFRMA_SA_PCPU]); in xfrm_add_acquire()
2975 err = verify_sec_ctx_len(attrs, extack); in xfrm_add_acquire()
2980 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err, extack); in xfrm_add_acquire()
3018 struct nlattr **attrs, int *num, in copy_from_user_migrate() argument
3021 struct nlattr *rt = attrs[XFRMA_MIGRATE]; in copy_from_user_migrate()
3028 uk = nla_data(attrs[XFRMA_KMADDRESS]); in copy_from_user_migrate()
3062 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_do_migrate() argument
3074 if (!attrs[XFRMA_MIGRATE]) { in xfrm_do_migrate()
3079 kmp = attrs[XFRMA_KMADDRESS] ? &km : NULL; in xfrm_do_migrate()
3081 err = copy_from_user_policy_type(&type, attrs, extack); in xfrm_do_migrate()
3085 err = copy_from_user_migrate(m, kmp, attrs, &n, extack); in xfrm_do_migrate()
3092 if (attrs[XFRMA_ENCAP]) { in xfrm_do_migrate()
3093 encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]), in xfrm_do_migrate()
3099 if (attrs[XFRMA_IF_ID]) in xfrm_do_migrate()
3100 if_id = nla_get_u32(attrs[XFRMA_IF_ID]); in xfrm_do_migrate()
3111 struct nlattr **attrs, struct netlink_ext_ack *extack) in xfrm_do_migrate() argument
3357 static int xfrm_reject_unused_attr(int type, struct nlattr **attrs, in xfrm_reject_unused_attr() argument
3360 if (attrs[XFRMA_SA_DIR]) { in xfrm_reject_unused_attr()
3372 if (attrs[XFRMA_SA_PCPU]) { in xfrm_reject_unused_attr()
3393 struct nlattr *attrs[XFRMA_MAX+1]; in xfrm_user_rcv_msg() local
3394 const struct xfrm_link *link; in xfrm_user_rcv_msg() local
3403 link = &xfrm_dispatch[type]; in xfrm_user_rcv_msg()
3415 nlh64 = xtr->rcv_msg_compat(nlh, link->nla_max, in xfrm_user_rcv_msg()
3416 link->nla_pol, extack); in xfrm_user_rcv_msg()
3428 .start = link->start, in xfrm_user_rcv_msg()
3429 .dump = link->dump, in xfrm_user_rcv_msg()
3430 .done = link->done, in xfrm_user_rcv_msg()
3433 if (link->dump == NULL) { in xfrm_user_rcv_msg()
3442 err = nlmsg_parse_deprecated(nlh, xfrm_msg_min[type], attrs, in xfrm_user_rcv_msg()
3443 link->nla_max ? : XFRMA_MAX, in xfrm_user_rcv_msg()
3444 link->nla_pol ? : xfrma_policy, extack); in xfrm_user_rcv_msg()
3448 if (!link->nla_pol || link->nla_pol == xfrma_policy) { in xfrm_user_rcv_msg()
3449 err = xfrm_reject_unused_attr((type + XFRM_MSG_BASE), attrs, extack); in xfrm_user_rcv_msg()
3454 if (link->doit == NULL) { in xfrm_user_rcv_msg()
3459 err = link->doit(skb, nlh, attrs, extack); in xfrm_user_rcv_msg()