brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 3673468 Raw
62 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <vmlinux.h>3#include <bpf/bpf_helpers.h>4 5#include "bpf_misc.h"6 7struct hmap_elem {8	struct bpf_timer timer;9};10 11struct {12	__uint(type, BPF_MAP_TYPE_HASH);13	__uint(max_entries, 64);14	__type(key, int);15	__type(value, struct hmap_elem);16} hmap SEC(".maps");17 18__attribute__((noinline))19static int timer_cb(void *map, int *key, struct bpf_timer *timer)20{21	volatile char buf[256] = {};22	return buf[69];23}24 25__attribute__((noinline))26static int bad_timer_cb(void *map, int *key, struct bpf_timer *timer)27{28	volatile char buf[300] = {};29	return buf[255] + timer_cb(NULL, NULL, NULL);30}31 32SEC("tc")33__failure __msg("combined stack size of 2 calls is")34int pseudo_call_check(struct __sk_buff *ctx)35{36	struct hmap_elem *elem;37	volatile char buf[256] = {};38 39	elem = bpf_map_lookup_elem(&hmap, &(int){0});40	if (!elem)41		return 0;42 43	timer_cb(NULL, NULL, NULL);44	return bpf_timer_set_callback(&elem->timer, timer_cb) + buf[0];45}46 47SEC("tc")48__failure __msg("combined stack size of 2 calls is")49int async_call_root_check(struct __sk_buff *ctx)50{51	struct hmap_elem *elem;52	volatile char buf[256] = {};53 54	elem = bpf_map_lookup_elem(&hmap, &(int){0});55	if (!elem)56		return 0;57 58	return bpf_timer_set_callback(&elem->timer, bad_timer_cb) + buf[0];59}60 61char _license[] SEC("license") = "GPL";62