// SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */ #include #include #include struct task_struct___bad { int pid; int fake_field; void *fake_field_subprog; } __attribute__((preserve_access_index)); SEC("?raw_tp/sys_enter") int bad_relo(const void *ctx) { static struct task_struct___bad *t; return bpf_core_field_size(t->fake_field); } static __noinline int bad_subprog(void) { static struct task_struct___bad *t; /* ugliness below is a field offset relocation */ return (void *)&t->fake_field_subprog - (void *)t; } SEC("?raw_tp/sys_enter") int bad_relo_subprog(const void *ctx) { static struct task_struct___bad *t; return bad_subprog() + bpf_core_field_size(t->pid); } char _license[] SEC("license") = "GPL";