brintos

brintos / linux-shallow public Read only

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