summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/test_global_func8.c
diff options
context:
space:
mode:
authorDmitrii Banshchikov <me@ubique.spb.ru>2020-11-13 17:17:56 +0000
committerAlexei Starovoitov <ast@kernel.org>2020-11-14 08:17:27 -0800
commitf782e2c300a717233b64697affda3ea7aac00b2b (patch)
tree7fa16ea50da2ef7daa298a339b156ef137224861 /tools/testing/selftests/bpf/progs/test_global_func8.c
parent50431b45685b600fc2851a3f2b53e24643efe6d3 (diff)
downloadlinux-f782e2c300a717233b64697affda3ea7aac00b2b.tar.gz
linux-f782e2c300a717233b64697affda3ea7aac00b2b.tar.bz2
linux-f782e2c300a717233b64697affda3ea7aac00b2b.zip
bpf: Relax return code check for subprograms
Currently verifier enforces return code checks for subprograms in the same manner as it does for program entry points. This prevents returning arbitrary scalar values from subprograms. Scalar type of returned values is checked by btf_prepare_func_args() and hence it should be safe to allow only scalars for now. Relax return code checks for subprograms and allow any correct scalar values. Fixes: 51c39bb1d5d10 (bpf: Introduce function-by-function verification) Signed-off-by: Dmitrii Banshchikov <me@ubique.spb.ru> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20201113171756.90594-1-me@ubique.spb.ru
Diffstat (limited to 'tools/testing/selftests/bpf/progs/test_global_func8.c')
-rw-r--r--tools/testing/selftests/bpf/progs/test_global_func8.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_global_func8.c b/tools/testing/selftests/bpf/progs/test_global_func8.c
new file mode 100644
index 000000000000..d55a6544b1ab
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_global_func8.c
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2020 Facebook */
+#include <stddef.h>
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+
+__noinline int foo(struct __sk_buff *skb)
+{
+ return bpf_get_prandom_u32();
+}
+
+SEC("cgroup_skb/ingress")
+int test_cls(struct __sk_buff *skb)
+{
+ if (!foo(skb))
+ return 0;
+
+ return 1;
+}