89 lines
2.1 KiB
C
89 lines
2.1 KiB
C
/* This file is used for benchmarking NewCollection().
|
|
*/
|
|
|
|
#include "../btf/testdata/bpf_core_read.h"
|
|
#include "common.h"
|
|
|
|
char __license[] __section("license") = "Dual MIT/GPL";
|
|
|
|
struct bpf_map_def __section("maps") kprobe_map = {
|
|
.type = BPF_MAP_TYPE_HASH,
|
|
.key_size = sizeof(uint32_t),
|
|
.value_size = sizeof(uint64_t),
|
|
.max_entries = 128,
|
|
};
|
|
|
|
static void *(*bpf_map_lookup_elem)(void *map, const void *key) = (void *)1;
|
|
static long (*bpf_map_update_elem)(void *map, const void *key, const void *value, uint64_t flags) = (void *)2;
|
|
static void *(*bpf_get_current_task)() = (void *)35;
|
|
static long (*bpf_probe_read_kernel)(void *dst, uint32_t size, const void *unsafe_ptr) = (void *)113;
|
|
|
|
#pragma clang attribute push(__attribute__((preserve_access_index)), apply_to = record)
|
|
struct ns_common {
|
|
unsigned int inum;
|
|
};
|
|
struct mnt_namespace {
|
|
struct ns_common ns;
|
|
};
|
|
struct nsproxy {
|
|
struct mnt_namespace *mnt_ns;
|
|
};
|
|
struct task_struct {
|
|
struct nsproxy *nsproxy;
|
|
};
|
|
#pragma clang attribute pop
|
|
|
|
static inline int impl() {
|
|
uint64_t initval = 1, *valp;
|
|
|
|
struct task_struct *task = (struct task_struct *)bpf_get_current_task();
|
|
uint32_t mntns = BPF_CORE_READ(task, nsproxy, mnt_ns, ns.inum);
|
|
|
|
valp = bpf_map_lookup_elem(&kprobe_map, &mntns);
|
|
if (!valp) {
|
|
bpf_map_update_elem(&kprobe_map, &mntns, &initval, 0);
|
|
return 0;
|
|
}
|
|
__sync_fetch_and_add(valp, 1);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define DEFINE_PROBE(i) \
|
|
__section("kprobe/sys_execvea" #i) int kprobe_execve##i() { \
|
|
return impl(); \
|
|
}
|
|
|
|
DEFINE_PROBE(0);
|
|
DEFINE_PROBE(1);
|
|
DEFINE_PROBE(2);
|
|
DEFINE_PROBE(3);
|
|
DEFINE_PROBE(4);
|
|
DEFINE_PROBE(5);
|
|
DEFINE_PROBE(6);
|
|
DEFINE_PROBE(7);
|
|
DEFINE_PROBE(8);
|
|
DEFINE_PROBE(9);
|
|
|
|
DEFINE_PROBE(10);
|
|
DEFINE_PROBE(11);
|
|
DEFINE_PROBE(12);
|
|
DEFINE_PROBE(13);
|
|
DEFINE_PROBE(14);
|
|
DEFINE_PROBE(15);
|
|
DEFINE_PROBE(16);
|
|
DEFINE_PROBE(17);
|
|
DEFINE_PROBE(18);
|
|
DEFINE_PROBE(19);
|
|
|
|
DEFINE_PROBE(20);
|
|
DEFINE_PROBE(21);
|
|
DEFINE_PROBE(22);
|
|
DEFINE_PROBE(23);
|
|
DEFINE_PROBE(24);
|
|
DEFINE_PROBE(25);
|
|
DEFINE_PROBE(26);
|
|
DEFINE_PROBE(27);
|
|
DEFINE_PROBE(28);
|
|
DEFINE_PROBE(29);
|