forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
samples, bpf: Refactor kprobe tracing user progs with libbpf
Currently, the kprobe BPF program attachment method for bpf_load is quite old. The implementation of bpf_load "directly" controls and manages(create, delete) the kprobe events of DEBUGFS. On the other hand, using using the libbpf automatically manages the kprobe event. (under bpf_link interface) By calling bpf_program__attach(_kprobe) in libbpf, the corresponding kprobe is created and the BPF program will be attached to this kprobe. To remove this, by simply invoking bpf_link__destroy will clean up the event. This commit refactors kprobe tracing programs (tracex{1~7}_user.c) with libbpf using bpf_link interface and bpf_program__attach. tracex2_kern.c, which tracks system calls (sys_*), has been modified to append prefix depending on architecture. Signed-off-by: Daniel T. Lee <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Acked-by: Yonghong Song <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
- Loading branch information
1 parent
0efdcef
commit 63841bc
Showing
9 changed files
with
252 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#ifndef __TRACE_COMMON_H | ||
#define __TRACE_COMMON_H | ||
|
||
#ifdef __x86_64__ | ||
#define SYSCALL(SYS) "__x64_" __stringify(SYS) | ||
#elif defined(__s390x__) | ||
#define SYSCALL(SYS) "__s390x_" __stringify(SYS) | ||
#else | ||
#define SYSCALL(SYS) __stringify(SYS) | ||
#endif | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,50 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#include <stdio.h> | ||
#include <linux/bpf.h> | ||
#include <unistd.h> | ||
#include <bpf/bpf.h> | ||
#include "bpf_load.h" | ||
#include <bpf/libbpf.h> | ||
#include "trace_helpers.h" | ||
|
||
int main(int ac, char **argv) | ||
{ | ||
FILE *f; | ||
struct bpf_link *link = NULL; | ||
struct bpf_program *prog; | ||
struct bpf_object *obj; | ||
char filename[256]; | ||
FILE *f; | ||
|
||
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); | ||
obj = bpf_object__open_file(filename, NULL); | ||
if (libbpf_get_error(obj)) { | ||
fprintf(stderr, "ERROR: opening BPF object file failed\n"); | ||
return 0; | ||
} | ||
|
||
prog = bpf_object__find_program_by_name(obj, "bpf_prog1"); | ||
if (!prog) { | ||
fprintf(stderr, "ERROR: finding a prog in obj file failed\n"); | ||
goto cleanup; | ||
} | ||
|
||
/* load BPF program */ | ||
if (bpf_object__load(obj)) { | ||
fprintf(stderr, "ERROR: loading BPF object file failed\n"); | ||
goto cleanup; | ||
} | ||
|
||
if (load_bpf_file(filename)) { | ||
printf("%s", bpf_log_buf); | ||
return 1; | ||
link = bpf_program__attach(prog); | ||
if (libbpf_get_error(link)) { | ||
fprintf(stderr, "ERROR: bpf_program__attach failed\n"); | ||
link = NULL; | ||
goto cleanup; | ||
} | ||
|
||
f = popen("taskset 1 ping -c5 localhost", "r"); | ||
(void) f; | ||
|
||
read_trace_pipe(); | ||
|
||
cleanup: | ||
bpf_link__destroy(link); | ||
bpf_object__close(obj); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.