| // SPDX-License-Identifier: GPL-2.0 |
| /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ |
| |
| #include "vmlinux.h" |
| #include <bpf/bpf_helpers.h> |
| |
| #include "bpf_misc.h" |
| |
| char _license[] SEC("license") = "GPL"; |
| |
| struct inner_array_type { |
| __uint(type, BPF_MAP_TYPE_ARRAY); |
| __uint(map_flags, BPF_F_MMAPABLE); |
| __type(key, __u32); |
| __type(value, __u64); |
| __uint(max_entries, 1); |
| } inner_array SEC(".maps"); |
| |
| struct { |
| __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS); |
| __uint(key_size, 4); |
| __uint(value_size, 4); |
| __uint(max_entries, 1); |
| __array(values, struct inner_array_type); |
| } outer_map SEC(".maps"); |
| |
| int pid = 0; |
| __u64 match_value = 0x13572468; |
| bool done = false; |
| bool pid_match = false; |
| bool outer_map_match = false; |
| |
| SEC("fentry/" SYS_PREFIX "sys_nanosleep") |
| int add_to_list_in_inner_array(void *ctx) |
| { |
| __u32 curr_pid, zero = 0; |
| struct bpf_map *map; |
| __u64 *value; |
| |
| curr_pid = (u32)bpf_get_current_pid_tgid(); |
| if (done || curr_pid != pid) |
| return 0; |
| |
| pid_match = true; |
| map = bpf_map_lookup_elem(&outer_map, &curr_pid); |
| if (!map) |
| return 0; |
| |
| outer_map_match = true; |
| value = bpf_map_lookup_elem(map, &zero); |
| if (!value) |
| return 0; |
| |
| *value = match_value; |
| done = true; |
| return 0; |
| } |