Expose interface luid and compartment id to sock_ops and sock_addr hooks (#1222)

* Add interface luid to bpf_sock_addr and bpf_sock_ops

And also add compartment id to bpf_sock_ops for consistency with
bpf_sock_addr, so that it is available to eBPF programs.

Signed-off-by: Dave Thaler <dthaler@microsoft.com>

* Expose interface luid and compartment id to sock_ops and sock_addr hooks

* compartment_id was exposed to sock_addr but not sock_ops
* interface_luid was not exposed to either

Exposing the interface_luid should be a performant way to compensate for
lack of scope_id in the hooks, since the interface luid is available
in the WFP callout, and is more specific than a scope id (so a scope id
can always be looked up from the interface luid in the future if
needed).

Fixes #1129

Signed-off-by: Dave Thaler <dthaler@microsoft.com>

* Update expected bpf2c output

Signed-off-by: Dave Thaler <dthaler@microsoft.com>
This commit is contained in:
Dave Thaler 2022-06-17 09:31:48 -07:00 коммит произвёл GitHub
Родитель 7cd7a05e16
Коммит 90eee8717e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
15 изменённых файлов: 2841 добавлений и 2755 удалений

Просмотреть файл

@ -148,6 +148,7 @@ typedef struct bpf_sock_addr
};
uint32_t protocol; ///< IP protocol.
uint32_t compartment_id; ///< Network compartment Id.
uint64_t interface_luid; ///< Interface LUID.
} bpf_sock_addr_t;
/**
@ -201,8 +202,10 @@ typedef struct _bpf_sock_ops
uint32_t remote_ip6[4];
}; ///< Remote IP address.
uint32_t remote_port;
}; ///< Remote IP address and port stored in network byte order.
uint8_t protocol; ///< IP protocol.
}; ///< Remote IP address and port stored in network byte order.
uint8_t protocol; ///< IP protocol.
uint32_t compartment_id; ///< Network compartment Id.
uint64_t interface_luid; ///< Interface LUID.
} bpf_sock_ops_t;
/**
@ -222,4 +225,4 @@ sock_ops_hook_t(bpf_sock_ops_t* context);
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#endif

Просмотреть файл

@ -63,6 +63,7 @@ typedef struct _wfp_ale_layer_fields
uint16_t protocol_field;
uint32_t direction_field;
uint16_t compartment_id_field;
uint16_t interface_luid_field;
} wfp_ale_layer_fields_t;
typedef struct _net_ebpf_extension_wfp_filter_parameters
@ -257,4 +258,4 @@ net_ebpf_ext_register_providers();
*
*/
void
net_ebpf_ext_unregister_providers();
net_ebpf_ext_unregister_providers();

Просмотреть файл

@ -251,7 +251,8 @@ wfp_ale_layer_fields_t wfp_connection_fields[] = {
FWPS_FIELD_ALE_AUTH_CONNECT_V4_IP_REMOTE_PORT,
FWPS_FIELD_ALE_AUTH_CONNECT_V4_IP_PROTOCOL,
0, // No direction field in this layer.
FWPS_FIELD_ALE_AUTH_CONNECT_V4_COMPARTMENT_ID},
FWPS_FIELD_ALE_AUTH_CONNECT_V4_COMPARTMENT_ID,
FWPS_FIELD_ALE_AUTH_CONNECT_V4_IP_LOCAL_INTERFACE},
// EBPF_HOOK_ALE_AUTH_CONNECT_V6
{FWPS_FIELD_ALE_AUTH_CONNECT_V6_IP_LOCAL_ADDRESS,
@ -260,7 +261,8 @@ wfp_ale_layer_fields_t wfp_connection_fields[] = {
FWPS_FIELD_ALE_AUTH_CONNECT_V6_IP_REMOTE_PORT,
FWPS_FIELD_ALE_AUTH_CONNECT_V6_IP_PROTOCOL,
0, // No direction field in this layer.
FWPS_FIELD_ALE_AUTH_CONNECT_V6_COMPARTMENT_ID},
FWPS_FIELD_ALE_AUTH_CONNECT_V6_COMPARTMENT_ID,
FWPS_FIELD_ALE_AUTH_CONNECT_V6_IP_LOCAL_INTERFACE},
// EBPF_HOOK_ALE_AUTH_RECV_ACCEPT_V4
{FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V4_IP_LOCAL_ADDRESS,
@ -269,7 +271,8 @@ wfp_ale_layer_fields_t wfp_connection_fields[] = {
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V4_IP_REMOTE_PORT,
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V4_IP_PROTOCOL,
0, // No direction field in this layer.
FWPS_FIELD_ALE_AUTH_CONNECT_V4_COMPARTMENT_ID},
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V4_COMPARTMENT_ID,
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V4_IP_LOCAL_INTERFACE},
// EBPF_HOOK_ALE_AUTH_RECV_ACCEPT_V6
{FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V6_IP_LOCAL_ADDRESS,
@ -278,7 +281,8 @@ wfp_ale_layer_fields_t wfp_connection_fields[] = {
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V6_IP_REMOTE_PORT,
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V6_IP_PROTOCOL,
0, // No direction field in this layer.
FWPS_FIELD_ALE_AUTH_CONNECT_V6_COMPARTMENT_ID}};
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V6_COMPARTMENT_ID,
FWPS_FIELD_ALE_AUTH_RECV_ACCEPT_V6_IP_LOCAL_INTERFACE}};
static void
_net_ebpf_extension_sock_addr_copy_wfp_connection_fields(
@ -321,6 +325,7 @@ _net_ebpf_extension_sock_addr_copy_wfp_connection_fields(
sock_addr_ctx->user_port = htons(incoming_values[destination_port_field].value.uint16);
sock_addr_ctx->protocol = incoming_values[fields->protocol_field].value.uint8;
sock_addr_ctx->compartment_id = incoming_values[fields->compartment_id_field].value.uint32;
sock_addr_ctx->interface_luid = *incoming_values[fields->interface_luid_field].value.uint64;
}
//
@ -382,4 +387,4 @@ net_ebpf_extension_sock_addr_authorize_connection_classify(
Exit:
if (attached_client)
net_ebpf_extension_hook_client_leave_rundown(attached_client, execution_type);
}
}

Просмотреть файл

@ -290,7 +290,8 @@ wfp_ale_layer_fields_t wfp_flow_established_fields[] = {
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_REMOTE_PORT,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_DIRECTION,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_COMPARTMENT_ID},
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_COMPARTMENT_ID,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_LOCAL_INTERFACE},
// EBPF_HOOK_ALE_FLOW_ESTABLISHED_V6
{FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_ADDRESS,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_PORT,
@ -298,13 +299,12 @@ wfp_ale_layer_fields_t wfp_flow_established_fields[] = {
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_REMOTE_PORT,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_PROTOCOL,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_DIRECTION,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_COMPARTMENT_ID}};
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_COMPARTMENT_ID,
FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_INTERFACE}};
static void
_net_ebpf_extension_sock_ops_copy_wfp_connection_fields(
_In_ const FWPS_INCOMING_VALUES* incoming_fixed_values,
_Out_ bpf_sock_ops_t* sock_ops_context,
_Out_ uint32_t* compartment_id)
_In_ const FWPS_INCOMING_VALUES* incoming_fixed_values, _Out_ bpf_sock_ops_t* sock_ops_context)
{
uint16_t wfp_layer_id = incoming_fixed_values->layerId;
net_ebpf_extension_hook_id_t hook_id = net_ebpf_extension_get_hook_id_from_wfp_layer_id(wfp_layer_id);
@ -335,7 +335,8 @@ _net_ebpf_extension_sock_ops_copy_wfp_connection_fields(
sock_ops_context->local_port = htons(incoming_values[fields->local_port_field].value.uint16);
sock_ops_context->remote_port = htons(incoming_values[fields->remote_port_field].value.uint16);
sock_ops_context->protocol = incoming_values[fields->protocol_field].value.uint8;
*compartment_id = incoming_values[fields->compartment_id_field].value.uint32;
sock_ops_context->compartment_id = incoming_values[fields->compartment_id_field].value.uint32;
sock_ops_context->interface_luid = *incoming_values[fields->interface_luid_field].value.uint64;
}
//
@ -360,7 +361,6 @@ net_ebpf_extension_sock_ops_flow_established_classify(
net_ebpf_extension_sock_ops_wfp_flow_context_t* local_flow_context = NULL;
bpf_sock_ops_t* sock_ops_context = NULL;
uint32_t client_compartment_id = UNSPECIFIED_COMPARTMENT_ID;
uint32_t compartment_id = UNSPECIFIED_COMPARTMENT_ID;
net_ebpf_extension_hook_id_t hook_id =
net_ebpf_extension_get_hook_id_from_wfp_layer_id(incoming_fixed_values->layerId);
KIRQL irql;
@ -396,11 +396,14 @@ net_ebpf_extension_sock_ops_flow_established_classify(
local_flow_context->filter_context = filter_context;
sock_ops_context = &local_flow_context->context;
_net_ebpf_extension_sock_ops_copy_wfp_connection_fields(incoming_fixed_values, sock_ops_context, &compartment_id);
_net_ebpf_extension_sock_ops_copy_wfp_connection_fields(incoming_fixed_values, sock_ops_context);
client_compartment_id = filter_context->compartment_id;
ASSERT((client_compartment_id == UNSPECIFIED_COMPARTMENT_ID) || (client_compartment_id == compartment_id));
if (client_compartment_id != UNSPECIFIED_COMPARTMENT_ID && client_compartment_id != compartment_id) {
ASSERT(
(client_compartment_id == UNSPECIFIED_COMPARTMENT_ID) ||
(client_compartment_id == sock_ops_context->compartment_id));
if (client_compartment_id != UNSPECIFIED_COMPARTMENT_ID &&
client_compartment_id != sock_ops_context->compartment_id) {
// The client is not interested in this compartment Id.
goto Exit;
}
@ -491,4 +494,4 @@ Exit:
ExFreePool(local_flow_context);
if (attached_client != NULL)
net_ebpf_extension_hook_client_leave_rundown(attached_client, execution_type);
}
}

Просмотреть файл

@ -55,7 +55,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -67,7 +67,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -101,129 +101,126 @@ static uint16_t authorize_connect4_maps[] = {
#pragma code_seg(push, "cgroup~1")
static uint64_t
authorize_connect4(void* context)
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
{
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
// Prologue
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_connect4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_connect4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 68 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 70 "sample/cgroup_sock_addr.c"
return r0;
#line 68 "sample/cgroup_sock_addr.c"
#line 70 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -243,153 +240,162 @@ static uint16_t authorize_connect6_maps[] = {
#pragma code_seg(push, "cgroup~2")
static uint64_t
authorize_connect6(void* context)
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
{
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
// Prologue
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_connect6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_connect6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 75 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 77 "sample/cgroup_sock_addr.c"
return r0;
#line 75 "sample/cgroup_sock_addr.c"
#line 77 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -409,129 +415,126 @@ static uint16_t authorize_recv_accept4_maps[] = {
#pragma code_seg(push, "cgroup~3")
static uint64_t
authorize_recv_accept4(void* context)
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
{
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
// Prologue
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 82 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 84 "sample/cgroup_sock_addr.c"
return r0;
#line 82 "sample/cgroup_sock_addr.c"
#line 84 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -551,153 +554,162 @@ static uint16_t authorize_recv_accept6_maps[] = {
#pragma code_seg(push, "cgroup~4")
static uint64_t
authorize_recv_accept6(void* context)
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
{
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
// Prologue
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 89 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 91 "sample/cgroup_sock_addr.c"
return r0;
#line 89 "sample/cgroup_sock_addr.c"
#line 91 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -714,7 +726,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect4_helpers,
1,
30,
29,
&authorize_connect4_program_type_guid,
&authorize_connect4_attach_type_guid,
},
@ -728,7 +740,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect6_helpers,
1,
38,
41,
&authorize_connect6_program_type_guid,
&authorize_connect6_attach_type_guid,
},
@ -742,7 +754,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept4_helpers,
1,
30,
29,
&authorize_recv_accept4_program_type_guid,
&authorize_recv_accept4_attach_type_guid,
},
@ -756,7 +768,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept6_helpers,
1,
38,
41,
&authorize_recv_accept6_program_type_guid,
&authorize_recv_accept6_attach_type_guid,
},

Просмотреть файл

@ -17,7 +17,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -29,7 +29,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -63,129 +63,126 @@ static uint16_t authorize_connect4_maps[] = {
#pragma code_seg(push, "cgroup~1")
static uint64_t
authorize_connect4(void* context)
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
{
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
// Prologue
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_connect4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_connect4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 68 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 70 "sample/cgroup_sock_addr.c"
return r0;
#line 68 "sample/cgroup_sock_addr.c"
#line 70 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -205,153 +202,162 @@ static uint16_t authorize_connect6_maps[] = {
#pragma code_seg(push, "cgroup~2")
static uint64_t
authorize_connect6(void* context)
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
{
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
// Prologue
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_connect6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_connect6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 75 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 77 "sample/cgroup_sock_addr.c"
return r0;
#line 75 "sample/cgroup_sock_addr.c"
#line 77 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -371,129 +377,126 @@ static uint16_t authorize_recv_accept4_maps[] = {
#pragma code_seg(push, "cgroup~3")
static uint64_t
authorize_recv_accept4(void* context)
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
{
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
// Prologue
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 82 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 84 "sample/cgroup_sock_addr.c"
return r0;
#line 82 "sample/cgroup_sock_addr.c"
#line 84 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -513,153 +516,162 @@ static uint16_t authorize_recv_accept6_maps[] = {
#pragma code_seg(push, "cgroup~4")
static uint64_t
authorize_recv_accept6(void* context)
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
{
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
// Prologue
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 89 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 91 "sample/cgroup_sock_addr.c"
return r0;
#line 89 "sample/cgroup_sock_addr.c"
#line 91 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -676,7 +688,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect4_helpers,
1,
30,
29,
&authorize_connect4_program_type_guid,
&authorize_connect4_attach_type_guid,
},
@ -690,7 +702,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect6_helpers,
1,
38,
41,
&authorize_connect6_program_type_guid,
&authorize_connect6_attach_type_guid,
},
@ -704,7 +716,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept4_helpers,
1,
30,
29,
&authorize_recv_accept4_program_type_guid,
&authorize_recv_accept4_attach_type_guid,
},
@ -718,7 +730,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept6_helpers,
1,
38,
41,
&authorize_recv_accept6_program_type_guid,
&authorize_recv_accept6_attach_type_guid,
},

Просмотреть файл

@ -184,7 +184,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -196,7 +196,7 @@ static map_entry_t _maps[] = {
{NULL,
{
BPF_MAP_TYPE_HASH, // Type of map.
44, // Size in bytes of a map key.
56, // Size in bytes of a map key.
4, // Size in bytes of a map value.
1, // Maximum number of entries allowed in the map.
0, // Inner map index.
@ -230,129 +230,126 @@ static uint16_t authorize_connect4_maps[] = {
#pragma code_seg(push, "cgroup~1")
static uint64_t
authorize_connect4(void* context)
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
{
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
// Prologue
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 66 "sample/cgroup_sock_addr.c"
#line 68 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_connect4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_connect4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 68 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 70 "sample/cgroup_sock_addr.c"
return r0;
#line 68 "sample/cgroup_sock_addr.c"
#line 70 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -372,153 +369,162 @@ static uint16_t authorize_connect6_maps[] = {
#pragma code_seg(push, "cgroup~2")
static uint64_t
authorize_connect6(void* context)
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
{
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
// Prologue
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 73 "sample/cgroup_sock_addr.c"
#line 75 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[1].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_connect6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_connect6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 75 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 77 "sample/cgroup_sock_addr.c"
return r0;
#line 75 "sample/cgroup_sock_addr.c"
#line 77 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -538,129 +544,126 @@ static uint16_t authorize_recv_accept4_maps[] = {
#pragma code_seg(push, "cgroup~3")
static uint64_t
authorize_recv_accept4(void* context)
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
{
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
// Prologue
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 80 "sample/cgroup_sock_addr.c"
#line 82 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXW pc=1 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint32_t)r2;
// EBPF_OP_STXW pc=2 dst=r10 src=r2 offset=-16 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_STXW pc=3 dst=r10 src=r2 offset=-20 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_STXW pc=4 dst=r10 src=r2 offset=-24 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_STXW pc=5 dst=r10 src=r2 offset=-28 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=5 dst=r10 src=r2 offset=-48 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_STXW pc=6 dst=r10 src=r2 offset=-32 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=6 dst=r10 src=r2 offset=-56 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_STXW pc=7 dst=r10 src=r2 offset=-36 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-40 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint32_t)r2;
// EBPF_OP_STXW pc=9 dst=r10 src=r2 offset=-44 imm=0
#line 34 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-44)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=4 imm=0
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=7 dst=r2 src=r1 offset=4 imm=0
#line 37 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_STXW pc=11 dst=r10 src=r2 offset=-48 imm=0
// EBPF_OP_STXW pc=8 dst=r10 src=r2 offset=-56 imm=0
#line 37 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=12 dst=r2 src=r1 offset=20 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=9 dst=r2 src=r1 offset=20 imm=0
#line 38 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=13 dst=r10 src=r2 offset=-32 imm=0
// EBPF_OP_STXH pc=10 dst=r10 src=r2 offset=-40 imm=0
#line 38 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=14 dst=r2 src=r1 offset=24 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=11 dst=r2 src=r1 offset=24 imm=0
#line 39 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=15 dst=r10 src=r2 offset=-28 imm=0
// EBPF_OP_STXW pc=12 dst=r10 src=r2 offset=-36 imm=0
#line 39 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=16 dst=r2 src=r1 offset=40 imm=0
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=13 dst=r2 src=r1 offset=40 imm=0
#line 40 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=17 dst=r10 src=r2 offset=-12 imm=0
// EBPF_OP_STXH pc=14 dst=r10 src=r2 offset=-20 imm=0
#line 40 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=18 dst=r1 src=r1 offset=44 imm=0
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=15 dst=r2 src=r1 offset=44 imm=0
#line 41 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=19 dst=r10 src=r1 offset=-8 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=20 dst=r2 src=r10 offset=0 imm=0
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=16 dst=r10 src=r2 offset=-16 imm=0
#line 41 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=17 dst=r1 src=r1 offset=56 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=18 dst=r10 src=r1 offset=-8 imm=0
#line 42 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=19 dst=r2 src=r10 offset=0 imm=0
#line 42 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=21 dst=r2 src=r0 offset=0 imm=-48
#line 41 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=22 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_ADD64_IMM pc=20 dst=r2 src=r0 offset=0 imm=-56
#line 42 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=21 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=24 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=23 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept4_helpers[0].address
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept4_helpers[0].tail_call) && (r0 == 0))
#line 43 "sample/cgroup_sock_addr.c"
#line 44 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=25 dst=r1 src=r0 offset=0 imm=0
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=24 dst=r1 src=r0 offset=0 imm=0
#line 44 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=26 dst=r0 src=r0 offset=0 imm=1
#line 43 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=25 dst=r0 src=r0 offset=0 imm=1
#line 44 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=27 dst=r1 src=r0 offset=1 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=26 dst=r1 src=r0 offset=1 imm=0
#line 46 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 45 "sample/cgroup_sock_addr.c"
#line 46 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=28 dst=r0 src=r1 offset=0 imm=0
#line 45 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=27 dst=r0 src=r1 offset=0 imm=0
#line 46 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=29 dst=r0 src=r0 offset=0 imm=0
#line 82 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=28 dst=r0 src=r0 offset=0 imm=0
#line 84 "sample/cgroup_sock_addr.c"
return r0;
#line 82 "sample/cgroup_sock_addr.c"
#line 84 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -680,153 +683,162 @@ static uint16_t authorize_recv_accept6_maps[] = {
#pragma code_seg(push, "cgroup~4")
static uint64_t
authorize_recv_accept6(void* context)
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
{
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
// Prologue
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
uint64_t stack[(UBPF_STACK_SIZE + 7) / 8];
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r0 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r1 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r2 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r3 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r4 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r5 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
register uint64_t r10 = 0;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r1 = (uintptr_t)context;
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r10 = (uintptr_t)((uint8_t*)stack + sizeof(stack));
// EBPF_OP_MOV64_IMM pc=0 dst=r2 src=r0 offset=0 imm=0
#line 87 "sample/cgroup_sock_addr.c"
#line 89 "sample/cgroup_sock_addr.c"
r2 = IMMEDIATE(0);
// EBPF_OP_STXDW pc=1 dst=r10 src=r2 offset=-16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=2 dst=r10 src=r2 offset=-24 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint64_t)r2;
// EBPF_OP_STXDW pc=3 dst=r10 src=r2 offset=-32 imm=0
#line 53 "sample/cgroup_sock_addr.c"
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=4 dst=r2 src=r1 offset=8 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=5 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=6 dst=r3 src=r1 offset=4 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=7 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=8 dst=r10 src=r2 offset=-48 imm=0
#line 53 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=9 dst=r2 src=r1 offset=16 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=10 dst=r2 src=r0 offset=0 imm=32
#line 53 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=11 dst=r3 src=r1 offset=12 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=12 dst=r2 src=r3 offset=0 imm=0
#line 53 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=13 dst=r10 src=r2 offset=-40 imm=0
#line 53 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXDW pc=4 dst=r10 src=r2 offset=-40 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=14 dst=r2 src=r1 offset=20 imm=0
// EBPF_OP_LDXW pc=5 dst=r2 src=r1 offset=8 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(8));
// EBPF_OP_LSH64_IMM pc=6 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=7 dst=r3 src=r1 offset=4 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(4));
// EBPF_OP_OR64_REG pc=8 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=9 dst=r10 src=r2 offset=-56 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-56)) = (uint64_t)r2;
// EBPF_OP_LDXW pc=10 dst=r2 src=r1 offset=16 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(16));
// EBPF_OP_LSH64_IMM pc=11 dst=r2 src=r0 offset=0 imm=32
#line 54 "sample/cgroup_sock_addr.c"
r2 <<= IMMEDIATE(32);
// EBPF_OP_LDXW pc=12 dst=r3 src=r1 offset=12 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r3 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(12));
// EBPF_OP_OR64_REG pc=13 dst=r2 src=r3 offset=0 imm=0
#line 54 "sample/cgroup_sock_addr.c"
r2 |= r3;
// EBPF_OP_STXDW pc=14 dst=r10 src=r2 offset=-48 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-48)) = (uint64_t)r2;
// EBPF_OP_LDXH pc=15 dst=r2 src=r1 offset=20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(20));
// EBPF_OP_STXH pc=15 dst=r10 src=r2 offset=-32 imm=0
#line 54 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=16 dst=r2 src=r1 offset=24 imm=0
// EBPF_OP_STXH pc=16 dst=r10 src=r2 offset=-40 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-40)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=17 dst=r2 src=r1 offset=24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(24));
// EBPF_OP_STXW pc=17 dst=r10 src=r2 offset=-28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=18 dst=r2 src=r1 offset=28 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=18 dst=r10 src=r2 offset=-36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-36)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=19 dst=r2 src=r1 offset=28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(28));
// EBPF_OP_STXW pc=19 dst=r10 src=r2 offset=-24 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=20 dst=r2 src=r1 offset=32 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=20 dst=r10 src=r2 offset=-32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-32)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=21 dst=r2 src=r1 offset=32 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(32));
// EBPF_OP_STXW pc=21 dst=r10 src=r2 offset=-20 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=22 dst=r2 src=r1 offset=36 imm=0
#line 55 "sample/cgroup_sock_addr.c"
// EBPF_OP_STXW pc=22 dst=r10 src=r2 offset=-28 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-28)) = (uint32_t)r2;
// EBPF_OP_LDXW pc=23 dst=r2 src=r1 offset=36 imm=0
#line 56 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(36));
// EBPF_OP_STXW pc=23 dst=r10 src=r2 offset=-16 imm=0
#line 55 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=24 dst=r2 src=r1 offset=40 imm=0
// EBPF_OP_STXW pc=24 dst=r10 src=r2 offset=-24 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-24)) = (uint32_t)r2;
// EBPF_OP_LDXH pc=25 dst=r2 src=r1 offset=40 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r2 = *(uint16_t*)(uintptr_t)(r1 + OFFSET(40));
// EBPF_OP_STXH pc=25 dst=r10 src=r2 offset=-12 imm=0
#line 56 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-12)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=26 dst=r1 src=r1 offset=44 imm=0
#line 57 "sample/cgroup_sock_addr.c"
r1 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=27 dst=r10 src=r1 offset=-8 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint32_t)r1;
// EBPF_OP_MOV64_REG pc=28 dst=r2 src=r10 offset=0 imm=0
// EBPF_OP_STXH pc=26 dst=r10 src=r2 offset=-20 imm=0
#line 57 "sample/cgroup_sock_addr.c"
*(uint16_t*)(uintptr_t)(r10 + OFFSET(-20)) = (uint16_t)r2;
// EBPF_OP_LDXW pc=27 dst=r2 src=r1 offset=44 imm=0
#line 58 "sample/cgroup_sock_addr.c"
r2 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(44));
// EBPF_OP_STXW pc=28 dst=r10 src=r2 offset=-16 imm=0
#line 58 "sample/cgroup_sock_addr.c"
*(uint32_t*)(uintptr_t)(r10 + OFFSET(-16)) = (uint32_t)r2;
// EBPF_OP_LDXDW pc=29 dst=r1 src=r1 offset=56 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r1 = *(uint64_t*)(uintptr_t)(r1 + OFFSET(56));
// EBPF_OP_STXDW pc=30 dst=r10 src=r1 offset=-8 imm=0
#line 59 "sample/cgroup_sock_addr.c"
*(uint64_t*)(uintptr_t)(r10 + OFFSET(-8)) = (uint64_t)r1;
// EBPF_OP_MOV64_REG pc=31 dst=r2 src=r10 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
r2 = r10;
// EBPF_OP_ADD64_IMM pc=29 dst=r2 src=r0 offset=0 imm=-48
#line 57 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-48);
// EBPF_OP_LDDW pc=30 dst=r1 src=r0 offset=0 imm=0
// EBPF_OP_ADD64_IMM pc=32 dst=r2 src=r0 offset=0 imm=-56
#line 59 "sample/cgroup_sock_addr.c"
r2 += IMMEDIATE(-56);
// EBPF_OP_LDDW pc=33 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = POINTER(_maps[0].address);
// EBPF_OP_CALL pc=32 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_CALL pc=35 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = authorize_recv_accept6_helpers[0].address
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
(r1, r2, r3, r4, r5);
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
if ((authorize_recv_accept6_helpers[0].tail_call) && (r0 == 0))
#line 59 "sample/cgroup_sock_addr.c"
#line 61 "sample/cgroup_sock_addr.c"
return 0;
// EBPF_OP_MOV64_REG pc=33 dst=r1 src=r0 offset=0 imm=0
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_REG pc=36 dst=r1 src=r0 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
r1 = r0;
// EBPF_OP_MOV64_IMM pc=34 dst=r0 src=r0 offset=0 imm=1
#line 59 "sample/cgroup_sock_addr.c"
// EBPF_OP_MOV64_IMM pc=37 dst=r0 src=r0 offset=0 imm=1
#line 61 "sample/cgroup_sock_addr.c"
r0 = IMMEDIATE(1);
// EBPF_OP_JEQ_IMM pc=35 dst=r1 src=r0 offset=1 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_JEQ_IMM pc=38 dst=r1 src=r0 offset=1 imm=0
#line 63 "sample/cgroup_sock_addr.c"
if (r1 == IMMEDIATE(0))
#line 61 "sample/cgroup_sock_addr.c"
#line 63 "sample/cgroup_sock_addr.c"
goto label_1;
// EBPF_OP_LDXW pc=36 dst=r0 src=r1 offset=0 imm=0
#line 61 "sample/cgroup_sock_addr.c"
// EBPF_OP_LDXW pc=39 dst=r0 src=r1 offset=0 imm=0
#line 63 "sample/cgroup_sock_addr.c"
r0 = *(uint32_t*)(uintptr_t)(r1 + OFFSET(0));
label_1:
// EBPF_OP_EXIT pc=37 dst=r0 src=r0 offset=0 imm=0
#line 89 "sample/cgroup_sock_addr.c"
// EBPF_OP_EXIT pc=40 dst=r0 src=r0 offset=0 imm=0
#line 91 "sample/cgroup_sock_addr.c"
return r0;
#line 89 "sample/cgroup_sock_addr.c"
#line 91 "sample/cgroup_sock_addr.c"
}
#pragma code_seg(pop)
#line __LINE__ __FILE__
@ -843,7 +855,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect4_helpers,
1,
30,
29,
&authorize_connect4_program_type_guid,
&authorize_connect4_attach_type_guid,
},
@ -857,7 +869,7 @@ static program_entry_t _programs[] = {
1,
authorize_connect6_helpers,
1,
38,
41,
&authorize_connect6_program_type_guid,
&authorize_connect6_attach_type_guid,
},
@ -871,7 +883,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept4_helpers,
1,
30,
29,
&authorize_recv_accept4_program_type_guid,
&authorize_recv_accept4_attach_type_guid,
},
@ -885,7 +897,7 @@ static program_entry_t _programs[] = {
1,
authorize_recv_accept6_helpers,
1,
38,
41,
&authorize_recv_accept6_program_type_guid,
&authorize_recv_accept6_attach_type_guid,
},

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -213,16 +213,16 @@ TEST_CASE("show sections cgroup_sock_addr.sys", "[netsh][sections]")
" Size\n"
" Section Type (bytes)\n"
"==================== ========= =======\n"
" cgroup/connect4 sock_addr 594\n"
" cgroup/connect6 sock_addr 728\n"
" cgroup/recv_accept4 sock_addr 594\n"
" cgroup/recv_accept6 sock_addr 728\n"
" cgroup/connect4 sock_addr 598\n"
" cgroup/connect6 sock_addr 770\n"
" cgroup/recv_accept4 sock_addr 598\n"
" cgroup/recv_accept6 sock_addr 770\n"
"\n"
" Key Value Max\n"
" Map Type Size Size Entries Name\n"
"================== ==== ===== ======= ========\n"
" Hash 44 4 1 ingress_connection_policy_map\n"
" Hash 44 4 1 egress_connection_policy_map\n");
" Hash 56 4 1 ingress_connection_policy_map\n"
" Hash 56 4 1 egress_connection_policy_map\n");
}
TEST_CASE("show verification nosuchfile.o", "[netsh][verification]")

Просмотреть файл

@ -39,6 +39,7 @@ authorize_v4(bpf_sock_addr_t* ctx, struct bpf_map_def* connection_policy_map)
tuple_key.dst_ip.ipv4 = ctx->user_ip4;
tuple_key.dst_port = ctx->user_port;
tuple_key.protocol = ctx->protocol;
tuple_key.interface_luid = ctx->interface_luid;
verdict = bpf_map_lookup_elem(connection_policy_map, &tuple_key);
@ -55,6 +56,7 @@ authorize_v6(bpf_sock_addr_t* ctx, struct bpf_map_def* connection_policy_map)
__builtin_memcpy(tuple_key.dst_ip.ipv6, ctx->user_ip6, sizeof(ctx->user_ip6));
tuple_key.dst_port = ctx->user_port;
tuple_key.protocol = ctx->protocol;
tuple_key.interface_luid = ctx->interface_luid;
verdict = bpf_map_lookup_elem(connection_policy_map, &tuple_key);

Просмотреть файл

@ -26,6 +26,7 @@ handle_v4(bpf_sock_ops_t* ctx, bool outbound, bool connected)
audit_entry.tuple.dst_ip.ipv4 = (outbound) ? ctx->remote_ip4 : ctx->local_ip4;
audit_entry.tuple.dst_port = (outbound) ? ctx->remote_port : ctx->local_port;
audit_entry.tuple.protocol = ctx->protocol;
audit_entry.tuple.interface_luid = ctx->interface_luid;
audit_entry.outbound = outbound;
audit_entry.connected = connected;
@ -50,6 +51,7 @@ handle_v6(bpf_sock_ops_t* ctx, bool outbound, bool connected)
__builtin_memcpy(audit_entry.tuple.dst_ip.ipv6, ip6, sizeof(uint32_t) * 4);
audit_entry.tuple.dst_port = (outbound) ? ctx->remote_port : ctx->local_port;
audit_entry.tuple.protocol = ctx->protocol;
audit_entry.tuple.interface_luid = ctx->interface_luid;
audit_entry.outbound = outbound;
audit_entry.connected = connected;

Просмотреть файл

@ -26,8 +26,8 @@ using namespace std::chrono_literals;
void
connection_test(
ADDRESS_FAMILY address_family,
sender_socket_t& sender_socket,
receiver_socket_t& receiver_socket,
_In_ sender_socket_t& sender_socket,
_In_ receiver_socket_t& receiver_socket,
uint32_t protocol)
{
struct bpf_object* object;
@ -60,6 +60,9 @@ connection_test(
tuple.src_port = INETADDR_PORT(local_address);
tuple.dst_port = htons(SOCKET_TEST_PORT);
tuple.protocol = protocol;
NET_LUID net_luid = {};
net_luid.Info.IfType = IF_TYPE_SOFTWARE_LOOPBACK;
tuple.interface_luid = net_luid.Value;
bpf_map* ingress_connection_policy_map = bpf_object__find_map_by_name(object, "ingress_connection_policy_map");
REQUIRE(ingress_connection_policy_map != nullptr);
@ -196,8 +199,8 @@ TEST_CASE("attach_sock_addr_programs", "[sock_addr_tests]")
void
connection_monitor_test(
ADDRESS_FAMILY address_family,
sender_socket_t& sender_socket,
receiver_socket_t& receiver_socket,
_In_ sender_socket_t& sender_socket,
_In_ receiver_socket_t& receiver_socket,
uint32_t protocol,
bool disconnect)
{
@ -229,6 +232,9 @@ connection_monitor_test(
tuple.src_port = INETADDR_PORT(local_address);
tuple.dst_port = htons(SOCKET_TEST_PORT);
tuple.protocol = protocol;
NET_LUID net_luid = {};
net_luid.Info.IfType = IF_TYPE_SOFTWARE_LOOPBACK;
tuple.interface_luid = net_luid.Value;
std::vector<std::vector<char>> audit_entry_list;
audit_entry_t audit_entries[3] = {0};
@ -405,4 +411,4 @@ main(int argc, char* argv[])
WSACleanup();
return result;
}
}

Просмотреть файл

@ -24,6 +24,7 @@ typedef struct _connection_tuple
ip_address_t dst_ip;
uint16_t dst_port;
uint32_t protocol;
uint64_t interface_luid;
} connection_tuple_t;
typedef struct _audit_entry