diff options
author | Yonghong Song <yhs@fb.com> | 2019-05-23 14:47:47 -0700 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-05-24 23:26:48 +0200 |
commit | 16f0efc3b46352018c297bbdb2c405e7d8a63095 (patch) | |
tree | be871dcf6d0496ed0093293e7cebb41a6b95ad0c /tools/testing/selftests/bpf/progs/test_send_signal_kern.c | |
parent | edaccf8985305967c22903a78283c8c837ea48dd (diff) | |
download | linux-16f0efc3b46352018c297bbdb2c405e7d8a63095.tar.gz linux-16f0efc3b46352018c297bbdb2c405e7d8a63095.tar.bz2 linux-16f0efc3b46352018c297bbdb2c405e7d8a63095.zip |
tools/bpf: add selftest in test_progs for bpf_send_signal() helper
The test covered both nmi and tracepoint perf events.
$ ./test_progs
...
test_send_signal_tracepoint:PASS:tracepoint 0 nsec
...
test_send_signal_common:PASS:tracepoint 0 nsec
...
test_send_signal_common:PASS:perf_event 0 nsec
...
test_send_signal:OK
Acked-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools/testing/selftests/bpf/progs/test_send_signal_kern.c')
-rw-r--r-- | tools/testing/selftests/bpf/progs/test_send_signal_kern.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_send_signal_kern.c b/tools/testing/selftests/bpf/progs/test_send_signal_kern.c new file mode 100644 index 000000000000..45a1a1a2c345 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/test_send_signal_kern.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2019 Facebook +#include <linux/bpf.h> +#include <linux/version.h> +#include "bpf_helpers.h" + +struct bpf_map_def SEC("maps") info_map = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(__u32), + .value_size = sizeof(__u64), + .max_entries = 1, +}; + +BPF_ANNOTATE_KV_PAIR(info_map, __u32, __u64); + +struct bpf_map_def SEC("maps") status_map = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(__u32), + .value_size = sizeof(__u64), + .max_entries = 1, +}; + +BPF_ANNOTATE_KV_PAIR(status_map, __u32, __u64); + +SEC("send_signal_demo") +int bpf_send_signal_test(void *ctx) +{ + __u64 *info_val, *status_val; + __u32 key = 0, pid, sig; + int ret; + + status_val = bpf_map_lookup_elem(&status_map, &key); + if (!status_val || *status_val != 0) + return 0; + + info_val = bpf_map_lookup_elem(&info_map, &key); + if (!info_val || *info_val == 0) + return 0; + + sig = *info_val >> 32; + pid = *info_val & 0xffffFFFF; + + if ((bpf_get_current_pid_tgid() >> 32) == pid) { + ret = bpf_send_signal(sig); + if (ret == 0) + *status_val = 1; + } + + return 0; +} +char __license[] SEC("license") = "GPL"; |