From: Rong Tao rongtao@cestc.cn
Add some selftest testcases that validate the expected behavior of the bpf_task_cwd_from_pid() kfunc that was added in the prior patch.
Signed-off-by: Rong Tao rongtao@cestc.cn --- .../selftests/bpf/prog_tests/task_kfunc.c | 3 ++ .../selftests/bpf/progs/task_kfunc_common.h | 1 + .../selftests/bpf/progs/task_kfunc_success.c | 47 +++++++++++++++++++ 3 files changed, 51 insertions(+)
diff --git a/tools/testing/selftests/bpf/prog_tests/task_kfunc.c b/tools/testing/selftests/bpf/prog_tests/task_kfunc.c index 83b90335967a..c18a0cb67164 100644 --- a/tools/testing/selftests/bpf/prog_tests/task_kfunc.c +++ b/tools/testing/selftests/bpf/prog_tests/task_kfunc.c @@ -149,6 +149,9 @@ static const char * const success_tests[] = { "task_kfunc_acquire_trusted_walked", "test_task_kfunc_flavor_relo", "test_task_kfunc_flavor_relo_not_found", + "test_task_cwd_from_pid_arg", + "test_task_cwd_from_pid", + "test_task_cwd_from_pid_current", };
static const char * const vpid_success_tests[] = { diff --git a/tools/testing/selftests/bpf/progs/task_kfunc_common.h b/tools/testing/selftests/bpf/progs/task_kfunc_common.h index e9c4fea7a4bb..b762054a1825 100644 --- a/tools/testing/selftests/bpf/progs/task_kfunc_common.h +++ b/tools/testing/selftests/bpf/progs/task_kfunc_common.h @@ -24,6 +24,7 @@ struct task_struct *bpf_task_acquire(struct task_struct *p) __ksym; void bpf_task_release(struct task_struct *p) __ksym; struct task_struct *bpf_task_from_pid(s32 pid) __ksym; struct task_struct *bpf_task_from_vpid(s32 vpid) __ksym; +int bpf_task_cwd_from_pid(s32 pid, char *buf, u32 buf_len) __ksym; void bpf_rcu_read_lock(void) __ksym; void bpf_rcu_read_unlock(void) __ksym;
diff --git a/tools/testing/selftests/bpf/progs/task_kfunc_success.c b/tools/testing/selftests/bpf/progs/task_kfunc_success.c index 5fb4fc19d26a..6424cf5c151e 100644 --- a/tools/testing/selftests/bpf/progs/task_kfunc_success.c +++ b/tools/testing/selftests/bpf/progs/task_kfunc_success.c @@ -351,6 +351,53 @@ int BPF_PROG(test_task_from_pid_invalid, struct task_struct *task, u64 clone_fla return 0; }
+SEC("tp_btf/task_newtask") +int BPF_PROG(test_task_cwd_from_pid_arg, struct task_struct *task, u64 clone_flags) +{ + char cwd[256]; + + if (!is_test_kfunc_task()) + return 0; + + err = 0; + err += bpf_task_cwd_from_pid(task->pid, NULL, sizeof(cwd)) != -EINVAL; + err += bpf_task_cwd_from_pid(task->pid, cwd, 0) != -EINVAL; + err += bpf_task_cwd_from_pid(-1, cwd, sizeof(cwd)) != -ESRCH; + return 0; +} + +SEC("tp_btf/task_newtask") +int BPF_PROG(test_task_cwd_from_pid, struct task_struct *task, u64 clone_flags) +{ + char cwd[256]; + + if (!is_test_kfunc_task()) + return 0; + + err = bpf_task_cwd_from_pid(task->pid, cwd, sizeof(cwd)); + return 0; +} + +SEC("tp_btf/task_newtask") +int BPF_PROG(test_task_cwd_from_pid_current, struct task_struct *task, u64 clone_flags) +{ + char cwd[128], cwd2[128]; + struct task_struct *current; + + if (!is_test_kfunc_task()) + return 0; + + current = bpf_get_current_task_btf(); + + err = 0; + err += bpf_task_cwd_from_pid(task->pid, cwd, sizeof(cwd)); + err += bpf_task_cwd_from_pid(current->pid, cwd2, sizeof(cwd2)); + + err += bpf_strncmp(cwd, sizeof(cwd), cwd2) != 0; + + return 0; +} + SEC("tp_btf/task_newtask") int BPF_PROG(task_kfunc_acquire_trusted_walked, struct task_struct *task, u64 clone_flags) {
linux-kselftest-mirror@lists.linaro.org