60 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */3#include <vmlinux.h>4#include <bpf/bpf_tracing.h>5#include <bpf/bpf_helpers.h>6#include "../bpf_testmod/bpf_testmod_kfunc.h"7 8static struct prog_test_ref_kfunc __kptr *v;9long total_sum = -1;10 11SEC("tc")12int test_jit_probe_mem(struct __sk_buff *ctx)13{14 struct prog_test_ref_kfunc *p;15 unsigned long zero = 0, sum;16 17 p = bpf_kfunc_call_test_acquire(&zero);18 if (!p)19 return 1;20 21 p = bpf_kptr_xchg(&v, p);22 if (p)23 goto release_out;24 25 /* Direct map value access of kptr, should be PTR_UNTRUSTED */26 p = v;27 if (!p)28 return 1;29 30 asm volatile (31 "r9 = %[p];"32 "%[sum] = 0;"33 34 /* r8 = p->a */35 "r8 = *(u32 *)(r9 + 0);"36 "%[sum] += r8;"37 38 /* r8 = p->b */39 "r8 = *(u32 *)(r9 + 4);"40 "%[sum] += r8;"41 42 "r9 += 8;"43 /* r9 = p->a */44 "r9 = *(u32 *)(r9 - 8);"45 "%[sum] += r9;"46 47 : [sum] "=r"(sum)48 : [p] "r"(p)49 : "r8", "r9"50 );51 52 total_sum = sum;53 return 0;54release_out:55 bpf_kfunc_call_test_release(p);56 return 1;57}58 59char _license[] SEC("license") = "GPL";60