brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 1bd48fe Raw
75 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */3 4#include <linux/bpf.h>5#include <bpf/bpf_helpers.h>6#include <bpf/bpf_core_read.h>7 8struct task_struct___bad {9	int pid;10	int fake_field;11	void *fake_field_subprog;12} __attribute__((preserve_access_index));13 14SEC("?raw_tp/sys_enter")15int bad_relo(const void *ctx)16{17	static struct task_struct___bad *t;18 19	return bpf_core_field_size(t->fake_field);20}21 22static __noinline int bad_subprog(void)23{24	static struct task_struct___bad *t;25 26	/* ugliness below is a field offset relocation */27	return (void *)&t->fake_field_subprog - (void *)t;28}29 30SEC("?raw_tp/sys_enter")31int bad_relo_subprog(const void *ctx)32{33	static struct task_struct___bad *t;34 35	return bad_subprog() + bpf_core_field_size(t->pid);36}37 38struct {39	__uint(type, BPF_MAP_TYPE_ARRAY);40	__uint(max_entries, 1);41	__type(key, int);42	__type(value, int);43} existing_map SEC(".maps");44 45struct {46	__uint(type, BPF_MAP_TYPE_ARRAY);47	__uint(max_entries, 1);48	__type(key, int);49	__type(value, int);50} missing_map SEC(".maps");51 52SEC("?raw_tp/sys_enter")53int use_missing_map(const void *ctx)54{55	int zero = 0, *value;56 57	value = bpf_map_lookup_elem(&existing_map, &zero);58 59	value = bpf_map_lookup_elem(&missing_map, &zero);60 61	return value != NULL;62}63 64extern int bpf_nonexistent_kfunc(void) __ksym __weak;65 66SEC("?raw_tp/sys_enter")67int use_missing_kfunc(const void *ctx)68{69	bpf_nonexistent_kfunc();70 71	return 0;72}73 74char _license[] SEC("license") = "GPL";75