Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright (c) 2022, Oracle and/or its affiliates. */
  3
  4#include "vmlinux.h"
  5
  6#include <bpf/bpf_core_read.h>
  7#include <bpf/bpf_helpers.h>
  8#include <bpf/bpf_tracing.h>
  9#include "bpf_misc.h"
 10
 11int uprobe_byname_parm1 = 0;
 12int uprobe_byname_ran = 0;
 13int uretprobe_byname_rc = 0;
 14int uretprobe_byname_ret = 0;
 15int uretprobe_byname_ran = 0;
 16u64 uprobe_byname2_parm1 = 0;
 17int uprobe_byname2_ran = 0;
 18u64 uretprobe_byname2_rc = 0;
 19int uretprobe_byname2_ran = 0;
 20
 21int test_pid;
 22
 23int a[8];
 24
 25/* This program cannot auto-attach, but that should not stop other
 26 * programs from attaching.
 27 */
 28SEC("uprobe")
 29int handle_uprobe_noautoattach(struct pt_regs *ctx)
 30{
 31	return 0;
 32}
 33
 34SEC("uprobe//proc/self/exe:autoattach_trigger_func")
 35int BPF_UPROBE(handle_uprobe_byname
 36	       , int arg1
 37	       , int arg2
 38	       , int arg3
 39#if FUNC_REG_ARG_CNT > 3
 40	       , int arg4
 41#endif
 42#if FUNC_REG_ARG_CNT > 4
 43	       , int arg5
 44#endif
 45#if FUNC_REG_ARG_CNT > 5
 46	       , int arg6
 47#endif
 48#if FUNC_REG_ARG_CNT > 6
 49	       , int arg7
 50#endif
 51#if FUNC_REG_ARG_CNT > 7
 52	       , int arg8
 53#endif
 54)
 55{
 56	uprobe_byname_parm1 = PT_REGS_PARM1_CORE(ctx);
 57	uprobe_byname_ran = 1;
 58
 59	a[0] = arg1;
 60	a[1] = arg2;
 61	a[2] = arg3;
 62#if FUNC_REG_ARG_CNT > 3
 63	a[3] = arg4;
 64#endif
 65#if FUNC_REG_ARG_CNT > 4
 66	a[4] = arg5;
 67#endif
 68#if FUNC_REG_ARG_CNT > 5
 69	a[5] = arg6;
 70#endif
 71#if FUNC_REG_ARG_CNT > 6
 72	a[6] = arg7;
 73#endif
 74#if FUNC_REG_ARG_CNT > 7
 75	a[7] = arg8;
 76#endif
 77	return 0;
 78}
 79
 80SEC("uretprobe//proc/self/exe:autoattach_trigger_func")
 81int BPF_URETPROBE(handle_uretprobe_byname, int ret)
 82{
 83	uretprobe_byname_rc = PT_REGS_RC_CORE(ctx);
 84	uretprobe_byname_ret = ret;
 85	uretprobe_byname_ran = 2;
 86
 87	return 0;
 88}
 89
 90
 91SEC("uprobe/libc.so.6:fopen")
 92int BPF_UPROBE(handle_uprobe_byname2, const char *pathname, const char *mode)
 93{
 94	int pid = bpf_get_current_pid_tgid() >> 32;
 95
 96	/* ignore irrelevant invocations */
 97	if (test_pid != pid)
 98		return 0;
 99	uprobe_byname2_parm1 = (u64)(long)pathname;
100	uprobe_byname2_ran = 3;
101	return 0;
102}
103
104SEC("uretprobe/libc.so.6:fopen")
105int BPF_URETPROBE(handle_uretprobe_byname2, void *ret)
106{
107	int pid = bpf_get_current_pid_tgid() >> 32;
108
109	/* ignore irrelevant invocations */
110	if (test_pid != pid)
111		return 0;
112	uretprobe_byname2_rc = (u64)(long)ret;
113	uretprobe_byname2_ran = 4;
114	return 0;
115}
116
117char _license[] SEC("license") = "GPL";