bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests
@ 2019-08-06  2:17 Alexei Starovoitov
  2019-08-06  2:17 ` [PATCH v2 bpf-next 1/2] selftests/bpf: add loop test 4 Alexei Starovoitov
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Alexei Starovoitov @ 2019-08-06  2:17 UTC (permalink / raw)
  To: davem; +Cc: daniel, netdev, bpf, kernel-team

Add two bounded loop tests.

v1-v2: addressed feedback from Yonghong.

Alexei Starovoitov (2):
  selftests/bpf: add loop test 4
  selftests/bpf: add loop test 5

 .../bpf/prog_tests/bpf_verif_scale.c          |  2 ++
 tools/testing/selftests/bpf/progs/loop4.c     | 18 +++++++++++
 tools/testing/selftests/bpf/progs/loop5.c     | 32 +++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/progs/loop4.c
 create mode 100644 tools/testing/selftests/bpf/progs/loop5.c

-- 
2.20.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 bpf-next 1/2] selftests/bpf: add loop test 4
  2019-08-06  2:17 [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Alexei Starovoitov
@ 2019-08-06  2:17 ` Alexei Starovoitov
  2019-08-06  2:17 ` [PATCH v2 bpf-next 2/2] selftests/bpf: add loop test 5 Alexei Starovoitov
  2019-08-06  4:19 ` [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Yonghong Song
  2 siblings, 0 replies; 5+ messages in thread
From: Alexei Starovoitov @ 2019-08-06  2:17 UTC (permalink / raw)
  To: davem; +Cc: daniel, netdev, bpf, kernel-team

Add a test that returns a 'random' number between [0, 2^20)
If state pruning is not working correctly for loop body the number of
processed insns will be 2^20 * num_of_insns_in_loop_body and the program
will be rejected.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
---
 .../selftests/bpf/prog_tests/bpf_verif_scale.c |  1 +
 tools/testing/selftests/bpf/progs/loop4.c      | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/progs/loop4.c

diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
index b4be96162ff4..e9e72d8d7aae 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
@@ -71,6 +71,7 @@ void test_bpf_verif_scale(void)
 
 		{ "loop1.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
 		{ "loop2.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
+		{ "loop4.o", BPF_PROG_TYPE_SCHED_CLS },
 
 		/* partial unroll. 19k insn in a loop.
 		 * Total program size 20.8k insn.
diff --git a/tools/testing/selftests/bpf/progs/loop4.c b/tools/testing/selftests/bpf/progs/loop4.c
new file mode 100644
index 000000000000..650859022771
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/loop4.c
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2019 Facebook
+#include <linux/bpf.h>
+#include "bpf_helpers.h"
+
+char _license[] SEC("license") = "GPL";
+
+SEC("socket")
+int combinations(volatile struct __sk_buff* skb)
+{
+	int ret = 0, i;
+
+#pragma nounroll
+	for (i = 0; i < 20; i++)
+		if (skb->len)
+			ret |= 1 << i;
+	return ret;
+}
-- 
2.20.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 bpf-next 2/2] selftests/bpf: add loop test 5
  2019-08-06  2:17 [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Alexei Starovoitov
  2019-08-06  2:17 ` [PATCH v2 bpf-next 1/2] selftests/bpf: add loop test 4 Alexei Starovoitov
@ 2019-08-06  2:17 ` Alexei Starovoitov
  2019-08-06  4:19 ` [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Yonghong Song
  2 siblings, 0 replies; 5+ messages in thread
From: Alexei Starovoitov @ 2019-08-06  2:17 UTC (permalink / raw)
  To: davem; +Cc: daniel, netdev, bpf, kernel-team

Add a test with multiple exit conditions.
It's not an infinite loop only when the verifier can properly track
all math on variable 'i' through all possible ways of executing this loop.

barrier()s are needed to disable llvm optimization that combines multiple
branches into fewer branches.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
---
 .../bpf/prog_tests/bpf_verif_scale.c          |  1 +
 tools/testing/selftests/bpf/progs/loop5.c     | 32 +++++++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/progs/loop5.c

diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
index e9e72d8d7aae..0caf8eafa9eb 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
@@ -72,6 +72,7 @@ void test_bpf_verif_scale(void)
 		{ "loop1.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
 		{ "loop2.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
 		{ "loop4.o", BPF_PROG_TYPE_SCHED_CLS },
+		{ "loop5.o", BPF_PROG_TYPE_SCHED_CLS },
 
 		/* partial unroll. 19k insn in a loop.
 		 * Total program size 20.8k insn.
diff --git a/tools/testing/selftests/bpf/progs/loop5.c b/tools/testing/selftests/bpf/progs/loop5.c
new file mode 100644
index 000000000000..28d1d668f07c
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/loop5.c
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2019 Facebook
+#include <linux/bpf.h>
+#include "bpf_helpers.h"
+#define barrier() __asm__ __volatile__("": : :"memory")
+
+char _license[] SEC("license") = "GPL";
+
+SEC("socket")
+int while_true(volatile struct __sk_buff* skb)
+{
+	int i = 0;
+
+	while (1) {
+		if (skb->len)
+			i += 3;
+		else
+			i += 7;
+		if (i == 9)
+			break;
+		barrier();
+		if (i == 10)
+			break;
+		barrier();
+		if (i == 13)
+			break;
+		barrier();
+		if (i == 14)
+			break;
+	}
+	return i;
+}
-- 
2.20.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests
  2019-08-06  2:17 [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Alexei Starovoitov
  2019-08-06  2:17 ` [PATCH v2 bpf-next 1/2] selftests/bpf: add loop test 4 Alexei Starovoitov
  2019-08-06  2:17 ` [PATCH v2 bpf-next 2/2] selftests/bpf: add loop test 5 Alexei Starovoitov
@ 2019-08-06  4:19 ` Yonghong Song
  2019-08-06 15:21   ` Alexei Starovoitov
  2 siblings, 1 reply; 5+ messages in thread
From: Yonghong Song @ 2019-08-06  4:19 UTC (permalink / raw)
  To: Alexei Starovoitov, davem; +Cc: daniel, netdev, bpf, Kernel Team



On 8/5/19 7:17 PM, Alexei Starovoitov wrote:
> Add two bounded loop tests.
> 
> v1-v2: addressed feedback from Yonghong.
> 
> Alexei Starovoitov (2):
>    selftests/bpf: add loop test 4
>    selftests/bpf: add loop test 5

Looks good to me. Ack for the whole series.
Acked-by: Yonghong Song <yhs@fb.com>

> 
>   .../bpf/prog_tests/bpf_verif_scale.c          |  2 ++
>   tools/testing/selftests/bpf/progs/loop4.c     | 18 +++++++++++
>   tools/testing/selftests/bpf/progs/loop5.c     | 32 +++++++++++++++++++
>   3 files changed, 52 insertions(+)
>   create mode 100644 tools/testing/selftests/bpf/progs/loop4.c
>   create mode 100644 tools/testing/selftests/bpf/progs/loop5.c
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests
  2019-08-06  4:19 ` [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Yonghong Song
@ 2019-08-06 15:21   ` Alexei Starovoitov
  0 siblings, 0 replies; 5+ messages in thread
From: Alexei Starovoitov @ 2019-08-06 15:21 UTC (permalink / raw)
  To: Yonghong Song; +Cc: Alexei Starovoitov, davem, daniel, netdev, bpf, Kernel Team

On Mon, Aug 5, 2019 at 9:19 PM Yonghong Song <yhs@fb.com> wrote:
>
>
>
> On 8/5/19 7:17 PM, Alexei Starovoitov wrote:
> > Add two bounded loop tests.
> >
> > v1-v2: addressed feedback from Yonghong.
> >
> > Alexei Starovoitov (2):
> >    selftests/bpf: add loop test 4
> >    selftests/bpf: add loop test 5
>
> Looks good to me. Ack for the whole series.
> Acked-by: Yonghong Song <yhs@fb.com>

Applied. Thanks

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-08-06 15:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-06  2:17 [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Alexei Starovoitov
2019-08-06  2:17 ` [PATCH v2 bpf-next 1/2] selftests/bpf: add loop test 4 Alexei Starovoitov
2019-08-06  2:17 ` [PATCH v2 bpf-next 2/2] selftests/bpf: add loop test 5 Alexei Starovoitov
2019-08-06  4:19 ` [PATCH v2 bpf-next 0/2] selftests/bpf: more loop tests Yonghong Song
2019-08-06 15:21   ` Alexei Starovoitov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).