brintos

brintos / linux-shallow public Read only

0
0
Text · 1.0 KiB · f9789e6 Raw
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