// 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; 
 | 
} 
 |