1 /* Copyright (c) 2016 Sargun Dhillon <sargun@sargun.me>
3 * This program is free software; you can redistribute it and/or
4 * modify it under the terms of version 2 of the GNU General Public
5 * License as published by the Free Software Foundation.
8 #include <linux/ptrace.h>
9 #include <uapi/linux/bpf.h>
10 #include <linux/version.h>
11 #include "bpf_helpers.h"
12 #include <uapi/linux/utsname.h>
14 struct bpf_map_def
SEC("maps") cgroup_map
= {
15 .type
= BPF_MAP_TYPE_CGROUP_ARRAY
,
16 .key_size
= sizeof(u32
),
17 .value_size
= sizeof(u32
),
21 struct bpf_map_def
SEC("maps") perf_map
= {
22 .type
= BPF_MAP_TYPE_ARRAY
,
23 .key_size
= sizeof(u32
),
24 .value_size
= sizeof(u64
),
28 /* Writes the last PID that called sync to a map at index 0 */
29 SEC("kprobe/sys_sync")
30 int bpf_prog1(struct pt_regs
*ctx
)
32 u64 pid
= bpf_get_current_pid_tgid();
35 if (!bpf_current_task_under_cgroup(&cgroup_map
, 0))
38 bpf_map_update_elem(&perf_map
, &idx
, &pid
, BPF_ANY
);
42 char _license
[] SEC("license") = "GPL";
43 u32 _version
SEC("version") = LINUX_VERSION_CODE
;