# Copyright 2017 syzkaller project authors. All rights reserved. # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. # AF_KEY support. include include include include resource sock_key[sock] socket$key(domain const[AF_KEY], type const[SOCK_RAW], proto const[PF_KEY_V2]) sock_key openat$pfkey(fd const[AT_FDCWD], file ptr[in, string["/proc/self/net/pfkey"]], flags flags[open_flags], mode const[0]) fd sendmsg$key(fd sock_key, msg ptr[in, send_msghdr_key], f flags[send_flags]) send_msghdr_key { msg_name const[0, intptr] msg_namelen const[0, int32] msg_iov ptr[in, iovec_sadb_msg] msg_iovlen const[1, intptr] msg_control const[0, intptr] msg_controllen const[0, intptr] msg_flags const[0, int32] } iovec_sadb_msg { addr ptr[in, sadb_msg] len bytesize[addr, intptr] } sadb_msg { sadb_msg_version const[PF_KEY_V2, int8] sadb_msg_type int8[SADB_RESERVED:SADB_MAX] sadb_msg_errno int8 sadb_msg_satype flags[sadb_satype, int8] sadb_msg_len bytesize8[parent, int16] sadb_msg_reserved const[0, int16] sadb_msg_seq netlink_seq sadb_msg_pid netlink_port_id ext_headers array[sadb_ext_hdr] } [packed] sadb_ext_hdr [ sadb_sa sadb_sa sadb_lifetime sadb_lifetime sadb_address sadb_address sadb_key sadb_key sadb_ident sadb_ident sadb_spirange sadb_spirange sadb_x_policy sadb_x_policy sadb_x_sa2 sadb_x_sa2 sadb_x_nat_t_type sadb_x_nat_t_type sadb_x_nat_t_port sadb_x_nat_t_port sadb_x_sec_ctx sadb_x_sec_ctx sadb_x_kmaddress sadb_x_kmaddress sadb_x_filter sadb_x_filter ] [varlen] sadb_sa { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_EXT_SA, int16] sadb_sa_spi xfrm_spi sadb_sa_replay int8 sadb_sa_state int8 sadb_sa_auth int8[SADB_AALG_NONE:SADB_AALG_MAX] sadb_sa_encrypt int8[SADB_X_CALG_NONE:SADB_X_CALG_MAX] sadb_sa_flags flags[sadb_sa_flags, int32] } [packed, align_8] sadb_sa_flags = SADB_SAFLAGS_PFS, SADB_SAFLAGS_NOPMTUDISC, SADB_SAFLAGS_DECAP_DSCP, SADB_SAFLAGS_NOECN sadb_lifetime { sadb_len bytesize8[parent, int16] sadb_exttype flags[sadb_lifetime_type, int16] sadb_lifetime_allocations int32 sadb_lifetime_bytes int64 sadb_lifetime_addtime int64 sadb_lifetime_usetime int64 } [packed, align_8] sadb_address { sadb_len bytesize8[parent, int16] sadb_exttype flags[sadb_address_type, int16] sadb_address_proto flags[xfrm_proto, int8] sadb_address_prefixlen flags[xfrm_prefixlens, int8] sadb_address_reserved const[0, int16] addr sadb_address_addr } [packed, align_8] sadb_address_addr [ in sockaddr_in in6 sockaddr_in6 ] [varlen] sadb_key { sadb_len bytesize8[parent, int16] sadb_exttype flags[sadb_key_type, int16] sadb_key_bits bitsize[key, int16] sadb_key_reserved const[0, int16] key array[int8] } [packed, align_8] sadb_ident { sadb_len bytesize8[parent, int16] sadb_exttype flags[sadb_ident_type, int16] sadb_ident_type int16 sadb_ident_reserved const[0, int16] sadb_ident_id int64 } [packed, align_8] sadb_spirange { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_EXT_SPIRANGE, int16] sadb_spirange_min xfrm_spi sadb_spirange_max xfrm_spi sadb_spirange_reserved const[0, int32] } [packed, align_8] sadb_x_policy { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_POLICY, int16] sadb_x_policy_type int16[IPSEC_POLICY_DISCARD:IPSEC_POLICY_BYPASS] sadb_x_policy_dir flags[ipsec_policy_dir, int8] sadb_x_policy_reserved const[0, int8] sadb_x_policy_id xfrm_policy_index sadb_x_policy_priority int32 policy sadb_x_ipsecrequest } [packed, align_8] sadb_x_ipsecrequest { sadb_x_ipsecrequest_len bytesize8[parent, int16] sadb_x_ipsecrequest_proto flags[xfrm_proto, int16] sadb_x_ipsecrequest_mode int8 sadb_x_ipsecrequest_level int8 sadb_x_ipsecrequest_reserved1 const[0, int16] sadb_x_ipsecrequest_reqid int32 sadb_x_ipsecrequest_reserved2 const[0, int32] saddr sadb_filter_addr daddr sadb_filter_addr } [packed, align_8] sadb_x_sa2 { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_SA2, int16] sadb_x_sa2_mode int8 sadb_x_sa2_reserved1 const[0, int8] sadb_x_sa2_reserved2 const[0, int16] sadb_x_sa2_sequence netlink_seq sadb_x_sa2_reqid xfrm_req_id } [packed, align_8] sadb_x_nat_t_type { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_NAT_T_TYPE, int16] sadb_x_nat_t_type_type int8 sadb_x_nat_t_type_reserved array[const[0, int8], 3] } [packed, align_8] sadb_x_nat_t_port { sadb_len bytesize8[parent, int16] sadb_exttype flags[sadb_nat_port_type, int16] sadb_x_nat_t_port_port sock_port sadb_x_nat_t_port_reserved const[0, int16] } [packed, align_8] sadb_x_sec_ctx { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_SEC_CTX, int16] sadb_x_ctx_alg int8 sadb_x_ctx_doi int8 sadb_x_ctx_len bytesize[ctx, int16] ctx array[int8] } [packed, align_8] sadb_x_kmaddress { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_KMADDRESS, int16] sadb_x_kmaddress_reserved const[0, int32] src sadb_address_addr dst sadb_address_addr } [packed, align_8] sadb_x_filter { sadb_len bytesize8[parent, int16] sadb_exttype const[SADB_X_EXT_FILTER, int16] sadb_x_filter_saddr sadb_filter_addr sadb_x_filter_daddr sadb_filter_addr sadb_x_filter_family flags[socket_domain, int16] sadb_x_filter_splen flags[sadb_filter_addr_len, int8] sadb_x_filter_dplen flags[sadb_filter_addr_len, int8] } [packed, align_8] sadb_filter_addr [ in ipv4_addr in6 ipv6_addr ] sadb_satype = SADB_SATYPE_UNSPEC, SADB_SATYPE_AH, SADB_SATYPE_ESP, SADB_SATYPE_RSVP, SADB_SATYPE_OSPFV2, SADB_SATYPE_RIPV2, SADB_SATYPE_MIP, SADB_X_SATYPE_IPCOMP, SADB_SATYPE_MAX sadb_lifetime_type = SADB_EXT_LIFETIME_CURRENT, SADB_EXT_LIFETIME_HARD, SADB_EXT_LIFETIME_SOFT sadb_address_type = SADB_EXT_ADDRESS_SRC, SADB_EXT_ADDRESS_DST, SADB_EXT_ADDRESS_PROXY, SADB_X_EXT_NAT_T_OA sadb_key_type = SADB_EXT_KEY_AUTH, SADB_EXT_KEY_ENCRYPT sadb_ident_type = SADB_EXT_IDENTITY_SRC, SADB_EXT_IDENTITY_DST sadb_nat_port_type = SADB_X_EXT_NAT_T_SPORT, SADB_X_EXT_NAT_T_DPORT ipsec_policy_dir = IPSEC_DIR_ANY, IPSEC_DIR_INBOUND, IPSEC_DIR_OUTBOUND, IPSEC_DIR_FWD, IPSEC_DIR_MAX sadb_filter_addr_len = 4, 16