[PATCH bpf-next v2 2/2] selftests/bpf: test maximum recursion depth for bpf_core_types_are_compat()

From: Matteo Croce
Date: Wed Feb 02 2022 - 16:13:44 EST


From: Matteo Croce <mcroce@xxxxxxxxxxxxx>

bpf_core_types_are_compat() was limited to 2 recursion levels, which are
enough to parse a function prototype.
Add a test which checks the existence of a function prototype, so to
test the bpf_core_types_are_compat() code path.

Signed-off-by: Matteo Croce <mcroce@xxxxxxxxxxxxx>
---
.../selftests/bpf/bpf_testmod/bpf_testmod.c | 3 +++
tools/testing/selftests/bpf/progs/core_kern.c | 14 ++++++++++++++
2 files changed, 17 insertions(+)

diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c b/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
index 595d32ab285a..a457071a7751 100644
--- a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
+++ b/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
@@ -13,6 +13,9 @@
#define CREATE_TRACE_POINTS
#include "bpf_testmod-events.h"

+typedef int (*func_proto_typedef)(long);
+func_proto_typedef funcp = NULL;
+
DEFINE_PER_CPU(int, bpf_testmod_ksym_percpu) = 123;

noinline void
diff --git a/tools/testing/selftests/bpf/progs/core_kern.c b/tools/testing/selftests/bpf/progs/core_kern.c
index 13499cc15c7d..bfea86b42563 100644
--- a/tools/testing/selftests/bpf/progs/core_kern.c
+++ b/tools/testing/selftests/bpf/progs/core_kern.c
@@ -101,4 +101,18 @@ int balancer_ingress(struct __sk_buff *ctx)
return 0;
}

+typedef int (*func_proto_typedef___match)(long);
+typedef void (*func_proto_typedef___doesnt_match)(char*);
+
+int out[2];
+
+SEC("raw_tracepoint/sys_enter")
+int core_relo_recur_limit(void *ctx)
+{
+ out[0] = bpf_core_type_exists(func_proto_typedef___match);
+ out[1] = bpf_core_type_exists(func_proto_typedef___doesnt_match);
+
+ return 0;
+}
+
char LICENSE[] SEC("license") = "GPL";
--
2.34.1