Re: [Bpf] [PATCH bpf-next v3 11/17] selftests/bpf: Add unit tests for new sign-extension load insns

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 7/19/23 11:31 PM, Yonghong Song wrote:


On 7/19/23 5:02 PM, Yonghong Song wrote:
Add unit tests for new ldsx insns. The test includes sign-extension
with a single value or with a value range.

Signed-off-by: Yonghong Song <yhs@xxxxxx>
---
  .../selftests/bpf/prog_tests/verifier.c       |   2 +
  .../selftests/bpf/progs/verifier_ldsx.c       | 117 ++++++++++++++++++
  2 files changed, 119 insertions(+)
  create mode 100644 tools/testing/selftests/bpf/progs/verifier_ldsx.c

diff --git a/tools/testing/selftests/bpf/prog_tests/verifier.c b/tools/testing/selftests/bpf/prog_tests/verifier.c
index c375e59ff28d..6eec6a9463c8 100644
--- a/tools/testing/selftests/bpf/prog_tests/verifier.c
+++ b/tools/testing/selftests/bpf/prog_tests/verifier.c
@@ -31,6 +31,7 @@
  #include "verifier_int_ptr.skel.h"
  #include "verifier_jeq_infer_not_null.skel.h"
  #include "verifier_ld_ind.skel.h"
+#include "verifier_ldsx.skel.h"
  #include "verifier_leak_ptr.skel.h"
  #include "verifier_loops1.skel.h"
  #include "verifier_lwt.skel.h"
@@ -133,6 +134,7 @@ void test_verifier_helper_value_access(void)  { RUN(verifier_helper_value_access   void test_verifier_int_ptr(void)              { RUN(verifier_int_ptr); }   void test_verifier_jeq_infer_not_null(void)   { RUN(verifier_jeq_infer_not_null); }
  void test_verifier_ld_ind(void)               { RUN(verifier_ld_ind); }
+void test_verifier_ldsx(void)                  { RUN(verifier_ldsx); }
  void test_verifier_leak_ptr(void)             { RUN(verifier_leak_ptr); }
  void test_verifier_loops1(void)               { RUN(verifier_loops1); }
  void test_verifier_lwt(void)                  { RUN(verifier_lwt); }
diff --git a/tools/testing/selftests/bpf/progs/verifier_ldsx.c b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
new file mode 100644
index 000000000000..4163e9ffffe9
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#include "bpf_misc.h"
+
+SEC("socket")
+__description("LDSX, S8")
+__success __success_unpriv __retval(-2)
+__naked void ldsx_s8(void)
+{
+    asm volatile ("                    \
+    r1 = 0x3fe;                    \
+    *(u64 *)(r10 - 8) = r1;                \
+    r0 = *(s8 *)(r10 - 8);                \
+    exit;                        \
+"    ::: __clobber_all);

Looks like latest llvm17 is okay with the above asm syntax
but llvm16 is not okay.

https://github.com/kernel-patches/bpf/pull/5377

Will check and fix the problem in the next revision.

I may need to guard this and other similar tests
with llvm compiler versions.



+}
+
+SEC("socket")
+__description("LDSX, S16")
+__success __success_unpriv __retval(-2)
+__naked void ldsx_s16(void)
+{
+    asm volatile ("                    \
+    r1 = 0x3fffe;                    \
+    *(u64 *)(r10 - 8) = r1;                \
+    r0 = *(s16 *)(r10 - 8);                \
+    exit;                        \
+"    ::: __clobber_all);
+}
+
[...]

--
Bpf mailing list
Bpf@xxxxxxxx
https://www.ietf.org/mailman/listinfo/bpf




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux