// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
* Copyright 2020 Google LLC.
|
*/
|
|
#include <linux/bpf.h>
|
#include <bpf/bpf_helpers.h>
|
#include <bpf/bpf_tracing.h>
|
|
char _license[] SEC("license") = "GPL";
|
|
static int sequence = 0;
|
__s32 input_retval = 0;
|
|
__u64 fentry_result = 0;
|
SEC("fentry/bpf_modify_return_test")
|
int BPF_PROG(fentry_test, int a, __u64 b)
|
{
|
sequence++;
|
fentry_result = (sequence == 1);
|
return 0;
|
}
|
|
__u64 fmod_ret_result = 0;
|
SEC("fmod_ret/bpf_modify_return_test")
|
int BPF_PROG(fmod_ret_test, int a, int *b, int ret)
|
{
|
sequence++;
|
/* This is the first fmod_ret program, the ret passed should be 0 */
|
fmod_ret_result = (sequence == 2 && ret == 0);
|
return input_retval;
|
}
|
|
__u64 fexit_result = 0;
|
SEC("fexit/bpf_modify_return_test")
|
int BPF_PROG(fexit_test, int a, __u64 b, int ret)
|
{
|
sequence++;
|
/* If the input_reval is non-zero a successful modification should have
|
* occurred.
|
*/
|
if (input_retval)
|
fexit_result = (sequence == 3 && ret == input_retval);
|
else
|
fexit_result = (sequence == 3 && ret == 4);
|
|
return 0;
|
}
|