1de7b9927SKumar Kartikeya Dwivedi // SPDX-License-Identifier: GPL-2.0
2de7b9927SKumar Kartikeya Dwivedi #include <vmlinux.h>
3de7b9927SKumar Kartikeya Dwivedi #include <bpf/bpf_tracing.h>
4de7b9927SKumar Kartikeya Dwivedi #include <bpf/bpf_helpers.h>
5de7b9927SKumar Kartikeya Dwivedi 
6de7b9927SKumar Kartikeya Dwivedi struct map_value {
7*03b77e17SAlexei Starovoitov 	struct task_struct __kptr_untrusted *ptr;
8de7b9927SKumar Kartikeya Dwivedi };
9de7b9927SKumar Kartikeya Dwivedi 
10de7b9927SKumar Kartikeya Dwivedi struct {
11de7b9927SKumar Kartikeya Dwivedi 	__uint(type, BPF_MAP_TYPE_LRU_HASH);
12de7b9927SKumar Kartikeya Dwivedi 	__uint(max_entries, 1);
13de7b9927SKumar Kartikeya Dwivedi 	__type(key, int);
14de7b9927SKumar Kartikeya Dwivedi 	__type(value, struct map_value);
15de7b9927SKumar Kartikeya Dwivedi } lru_map SEC(".maps");
16de7b9927SKumar Kartikeya Dwivedi 
17de7b9927SKumar Kartikeya Dwivedi int pid = 0;
18de7b9927SKumar Kartikeya Dwivedi int result = 1;
19de7b9927SKumar Kartikeya Dwivedi 
20de7b9927SKumar Kartikeya Dwivedi SEC("fentry/bpf_ktime_get_ns")
printk(void * ctx)21de7b9927SKumar Kartikeya Dwivedi int printk(void *ctx)
22de7b9927SKumar Kartikeya Dwivedi {
23de7b9927SKumar Kartikeya Dwivedi 	struct map_value v = {};
24de7b9927SKumar Kartikeya Dwivedi 
25de7b9927SKumar Kartikeya Dwivedi 	if (pid == bpf_get_current_task_btf()->pid)
26de7b9927SKumar Kartikeya Dwivedi 		bpf_map_update_elem(&lru_map, &(int){0}, &v, 0);
27de7b9927SKumar Kartikeya Dwivedi 	return 0;
28de7b9927SKumar Kartikeya Dwivedi }
29de7b9927SKumar Kartikeya Dwivedi 
30de7b9927SKumar Kartikeya Dwivedi SEC("fentry/do_nanosleep")
nanosleep(void * ctx)31de7b9927SKumar Kartikeya Dwivedi int nanosleep(void *ctx)
32de7b9927SKumar Kartikeya Dwivedi {
33de7b9927SKumar Kartikeya Dwivedi 	struct map_value val = {}, *v;
34de7b9927SKumar Kartikeya Dwivedi 	struct task_struct *current;
35de7b9927SKumar Kartikeya Dwivedi 
36de7b9927SKumar Kartikeya Dwivedi 	bpf_map_update_elem(&lru_map, &(int){0}, &val, 0);
37de7b9927SKumar Kartikeya Dwivedi 	v = bpf_map_lookup_elem(&lru_map, &(int){0});
38de7b9927SKumar Kartikeya Dwivedi 	if (!v)
39de7b9927SKumar Kartikeya Dwivedi 		return 0;
40de7b9927SKumar Kartikeya Dwivedi 	bpf_map_delete_elem(&lru_map, &(int){0});
41de7b9927SKumar Kartikeya Dwivedi 	current = bpf_get_current_task_btf();
42de7b9927SKumar Kartikeya Dwivedi 	v->ptr = current;
43de7b9927SKumar Kartikeya Dwivedi 	pid = current->pid;
44de7b9927SKumar Kartikeya Dwivedi 	bpf_ktime_get_ns();
45de7b9927SKumar Kartikeya Dwivedi 	result = !v->ptr;
46de7b9927SKumar Kartikeya Dwivedi 	return 0;
47de7b9927SKumar Kartikeya Dwivedi }
48de7b9927SKumar Kartikeya Dwivedi 
49de7b9927SKumar Kartikeya Dwivedi char _license[] SEC("license") = "GPL";
50