bpf, tests: Add word-order tests for load/store of double words
authorJohan Almbladh <johan.almbladh@anyfinetworks.com>
Mon, 9 Aug 2021 09:18:24 +0000 (11:18 +0200)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 10 Aug 2021 09:33:18 +0000 (11:33 +0200)
A double word (64-bit) load/store may be implemented as two successive
32-bit operations, one for each word. Check that the order of those
operations is consistent with the machine endianness.

Signed-off-by: Johan Almbladh <johan.almbladh@anyfinetworks.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20210809091829.810076-10-johan.almbladh@anyfinetworks.com
lib/test_bpf.c

index e3c2569630209a02038b11e5e90e5fd4b900e7ce..402c199cc119d0882bb5988fe4973a981ea50164 100644 (file)
@@ -5420,6 +5420,42 @@ static struct bpf_test tests[] = {
                { { 0, 0xffffffff } },
                .stack_depth = 40,
        },
+       {
+               "STX_MEM_DW: Store double word: first word in memory",
+               .u.insns_int = {
+                       BPF_LD_IMM64(R0, 0),
+                       BPF_LD_IMM64(R1, 0x0123456789abcdefLL),
+                       BPF_STX_MEM(BPF_DW, R10, R1, -40),
+                       BPF_LDX_MEM(BPF_W, R0, R10, -40),
+                       BPF_EXIT_INSN(),
+               },
+               INTERNAL,
+               { },
+#ifdef __BIG_ENDIAN
+               { { 0, 0x01234567 } },
+#else
+               { { 0, 0x89abcdef } },
+#endif
+               .stack_depth = 40,
+       },
+       {
+               "STX_MEM_DW: Store double word: second word in memory",
+               .u.insns_int = {
+                       BPF_LD_IMM64(R0, 0),
+                       BPF_LD_IMM64(R1, 0x0123456789abcdefLL),
+                       BPF_STX_MEM(BPF_DW, R10, R1, -40),
+                       BPF_LDX_MEM(BPF_W, R0, R10, -36),
+                       BPF_EXIT_INSN(),
+               },
+               INTERNAL,
+               { },
+#ifdef __BIG_ENDIAN
+               { { 0, 0x89abcdef } },
+#else
+               { { 0, 0x01234567 } },
+#endif
+               .stack_depth = 40,
+       },
        /* BPF_STX | BPF_ATOMIC | BPF_W/DW */
        {
                "STX_XADD_W: Test: 0x12 + 0x10 = 0x22",