mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 05:44:11 +00:00
selftests/bpf: Add nested trust selftests suite
Now that defining trusted fields in a struct is supported, we should add selftests to verify the behavior. This patch adds a few such testcases. Signed-off-by: David Vernet <void@manifault.com> Link: https://lore.kernel.org/r/20230125143816.721952-4-void@manifault.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
516f4d3397
commit
a6541f4d28
5 changed files with 77 additions and 0 deletions
|
@ -44,6 +44,7 @@ map_kptr # failed to open_and_load program: -524
|
|||
modify_return # modify_return attach failed: -524 (trampoline)
|
||||
module_attach # skel_attach skeleton attach failed: -524 (trampoline)
|
||||
mptcp
|
||||
nested_trust # JIT does not support calling kernel function
|
||||
netcnt # failed to load BPF skeleton 'netcnt_prog': -7 (?)
|
||||
probe_user # check_kprobe_res wrong kprobe res from probe read (?)
|
||||
rcu_read_lock # failed to find kernel BTF type ID of '__x64_sys_getpgid': -3 (?)
|
||||
|
|
12
tools/testing/selftests/bpf/prog_tests/nested_trust.c
Normal file
12
tools/testing/selftests/bpf/prog_tests/nested_trust.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
|
||||
|
||||
#include <test_progs.h>
|
||||
#include "nested_trust_failure.skel.h"
|
||||
#include "nested_trust_success.skel.h"
|
||||
|
||||
void test_nested_trust(void)
|
||||
{
|
||||
RUN_TESTS(nested_trust_success);
|
||||
RUN_TESTS(nested_trust_failure);
|
||||
}
|
12
tools/testing/selftests/bpf/progs/nested_trust_common.h
Normal file
12
tools/testing/selftests/bpf/progs/nested_trust_common.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
|
||||
|
||||
#ifndef _NESTED_TRUST_COMMON_H
|
||||
#define _NESTED_TRUST_COMMON_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
bool bpf_cpumask_test_cpu(unsigned int cpu, const struct cpumask *cpumask) __ksym;
|
||||
bool bpf_cpumask_first_zero(const struct cpumask *cpumask) __ksym;
|
||||
|
||||
#endif /* _NESTED_TRUST_COMMON_H */
|
33
tools/testing/selftests/bpf/progs/nested_trust_failure.c
Normal file
33
tools/testing/selftests/bpf/progs/nested_trust_failure.c
Normal file
|
@ -0,0 +1,33 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
|
||||
|
||||
#include <vmlinux.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include "bpf_misc.h"
|
||||
|
||||
#include "nested_trust_common.h"
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
||||
|
||||
/* Prototype for all of the program trace events below:
|
||||
*
|
||||
* TRACE_EVENT(task_newtask,
|
||||
* TP_PROTO(struct task_struct *p, u64 clone_flags)
|
||||
*/
|
||||
|
||||
SEC("tp_btf/task_newtask")
|
||||
__failure __msg("R2 must be referenced or trusted")
|
||||
int BPF_PROG(test_invalid_nested_user_cpus, struct task_struct *task, u64 clone_flags)
|
||||
{
|
||||
bpf_cpumask_test_cpu(0, task->user_cpus_ptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("tp_btf/task_newtask")
|
||||
__failure __msg("R1 must have zero offset when passed to release func or trusted arg to kfunc")
|
||||
int BPF_PROG(test_invalid_nested_offset, struct task_struct *task, u64 clone_flags)
|
||||
{
|
||||
bpf_cpumask_first_zero(&task->cpus_mask);
|
||||
return 0;
|
||||
}
|
19
tools/testing/selftests/bpf/progs/nested_trust_success.c
Normal file
19
tools/testing/selftests/bpf/progs/nested_trust_success.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
|
||||
|
||||
#include <vmlinux.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include "bpf_misc.h"
|
||||
|
||||
#include "nested_trust_common.h"
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
||||
|
||||
SEC("tp_btf/task_newtask")
|
||||
__success
|
||||
int BPF_PROG(test_read_cpumask, struct task_struct *task, u64 clone_flags)
|
||||
{
|
||||
bpf_cpumask_test_cpu(0, task->cpus_ptr);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue