brintos

brintos / linux-shallow public Read only

0
0
Text · 824 B · 27109b8 Raw
45 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2021 Google */3 4#include "vmlinux.h"5 6#include <bpf/bpf_helpers.h>7 8extern const int bpf_prog_active __ksym; /* int type global var. */9 10SEC("raw_tp/sys_enter")11int handler1(const void *ctx)12{13	int *active;14	__u32 cpu;15 16	cpu = bpf_get_smp_processor_id();17	active = (int *)bpf_per_cpu_ptr(&bpf_prog_active, cpu);18	if (active) {19		/* Kernel memory obtained from bpf_{per,this}_cpu_ptr20		 * is read-only, should _not_ pass verification.21		 */22		/* WRITE_ONCE */23		*(volatile int *)active = -1;24	}25 26	return 0;27}28 29__noinline int write_active(int *p)30{31	return p ? (*p = 42) : 0;32}33 34SEC("raw_tp/sys_enter")35int handler2(const void *ctx)36{37	int *active;38 39	active = bpf_this_cpu_ptr(&bpf_prog_active);40	write_active(active);41	return 0;42}43 44char _license[] SEC("license") = "GPL";45