1*19f12431SEmil Tsalapatis // SPDX-License-Identifier: GPL-2.0 2*19f12431SEmil Tsalapatis /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */ 3*19f12431SEmil Tsalapatis 4*19f12431SEmil Tsalapatis #define BPF_NO_KFUNC_PROTOTYPES 5*19f12431SEmil Tsalapatis #include <vmlinux.h> 6*19f12431SEmil Tsalapatis #include <bpf/bpf_helpers.h> 7*19f12431SEmil Tsalapatis #include <bpf/bpf_tracing.h> 8*19f12431SEmil Tsalapatis #include "bpf_misc.h" 9*19f12431SEmil Tsalapatis #include "bpf_experimental.h" 10*19f12431SEmil Tsalapatis #include "bpf_arena_common.h" 11*19f12431SEmil Tsalapatis 12*19f12431SEmil Tsalapatis #define ARENA_PAGES (32) 13*19f12431SEmil Tsalapatis 14*19f12431SEmil Tsalapatis struct { 15*19f12431SEmil Tsalapatis __uint(type, BPF_MAP_TYPE_ARENA); 16*19f12431SEmil Tsalapatis __uint(map_flags, BPF_F_MMAPABLE); 17*19f12431SEmil Tsalapatis __uint(max_entries, ARENA_PAGES); 18*19f12431SEmil Tsalapatis #ifdef __TARGET_ARCH_arm64 19*19f12431SEmil Tsalapatis __ulong(map_extra, (1ull << 32) | (~0u - __PAGE_SIZE * ARENA_PAGES + 1)); 20*19f12431SEmil Tsalapatis #else 21*19f12431SEmil Tsalapatis __ulong(map_extra, (1ull << 44) | (~0u - __PAGE_SIZE * ARENA_PAGES + 1)); 22*19f12431SEmil Tsalapatis #endif 23*19f12431SEmil Tsalapatis } arena SEC(".maps"); 24*19f12431SEmil Tsalapatis 25*19f12431SEmil Tsalapatis /* 26*19f12431SEmil Tsalapatis * Fill the entire arena with global data. 27*19f12431SEmil Tsalapatis * The offset into the arena should be 0. 28*19f12431SEmil Tsalapatis */ 29*19f12431SEmil Tsalapatis char __arena global_data[ARENA_PAGES][PAGE_SIZE]; 30*19f12431SEmil Tsalapatis 31*19f12431SEmil Tsalapatis SEC("syscall") 32*19f12431SEmil Tsalapatis __success __retval(0) 33*19f12431SEmil Tsalapatis int check_reserve2(void *ctx) 34*19f12431SEmil Tsalapatis { 35*19f12431SEmil Tsalapatis #if defined(__BPF_FEATURE_ADDR_SPACE_CAST) 36*19f12431SEmil Tsalapatis void __arena *guard; 37*19f12431SEmil Tsalapatis int ret; 38*19f12431SEmil Tsalapatis 39*19f12431SEmil Tsalapatis guard = (void __arena *)arena_base(&arena); 40*19f12431SEmil Tsalapatis 41*19f12431SEmil Tsalapatis /* Make sure the data at offset 0 case is properly handled. */ 42*19f12431SEmil Tsalapatis ret = bpf_arena_reserve_pages(&arena, guard, 1); 43*19f12431SEmil Tsalapatis if (!ret) 44*19f12431SEmil Tsalapatis return 1; 45*19f12431SEmil Tsalapatis #endif 46*19f12431SEmil Tsalapatis return 0; 47*19f12431SEmil Tsalapatis } 48*19f12431SEmil Tsalapatis 49*19f12431SEmil Tsalapatis char _license[] SEC("license") = "GPL"; 50