]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
net: filter: test fill/spill of all M[] regs
authorDaniel Borkmann <dborkman@redhat.com>
Mon, 26 May 2014 18:17:34 +0000 (20:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 May 2014 23:27:39 +0000 (16:27 -0700)
This test for classic BPF probes stores and load combination
via X on all 16 registers of the scratch memory store. It
initially loads integer 100 and passes this value around
to each register while incrementing it every time, thus we
expect to have 116 as a result. Might be useful for JIT
testing.

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
lib/test_bpf.c

index af677cb718f52b091a1f74f9afac34b740b97b84..6be9119c60f1a4117e8a71e6b87103d4b786c5a4 100644 (file)
@@ -1485,6 +1485,96 @@ static struct bpf_test tests[] = {
                { },
                { },
        },
+       {       /* Mainly checking JIT here. */
+               "M[]: STX + LDX",
+               .u.insns = {
+                       BPF_STMT(BPF_LDX | BPF_IMM, 100),
+                       BPF_STMT(BPF_STX, 0),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 0),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 1),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 1),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 2),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 2),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 3),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 3),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 4),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 4),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 5),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 5),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 6),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 6),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 7),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 7),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 8),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 8),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 9),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 9),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 10),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 10),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 11),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 11),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 12),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 12),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 13),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 13),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 14),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 14),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_STX, 15),
+                       BPF_STMT(BPF_LDX | BPF_MEM, 15),
+                       BPF_STMT(BPF_MISC | BPF_TXA, 0),
+                       BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
+                       BPF_STMT(BPF_MISC | BPF_TAX, 0),
+                       BPF_STMT(BPF_RET | BPF_A, 0),
+               },
+               CLASSIC | FLAG_NO_DATA,
+               { },
+               { { 0, 116 } },
+       },
 };
 
 static struct net_device dev;