lib/test_bpf: Add additional BPF_ADD tests
Some of these tests proved useful with the powerpc eBPF JIT port due to sign-extended 16-bit immediate loads. Though some of these aspects get covered in other tests, it is better to have explicit tests so as to quickly tag the precise problem. Cc: Alexei Starovoitov <ast@fb.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: "David S. Miller" <davem@davemloft.net> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
b64b50eac4
Коммит
9c94f6c8e0
128
lib/test_bpf.c
128
lib/test_bpf.c
|
@ -2565,6 +2565,70 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_ADD_K: 0 + 0xffff = 0xffff",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0xffff),
|
||||
BPF_ALU32_IMM(BPF_ADD, R2, 0xffff),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0x7fffffff),
|
||||
BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_ADD_K: 0 + 0x80000000 = 0x80000000",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0x80000000),
|
||||
BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_ADD_K: 0 + 0x80008000 = 0x80008000",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0x80008000),
|
||||
BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_ADD_K: 1 + 2 = 3",
|
||||
.u.insns_int = {
|
||||
|
@ -2657,6 +2721,70 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_ADD_K: 0 + 0xffff = 0xffff",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0xffff),
|
||||
BPF_ALU64_IMM(BPF_ADD, R2, 0xffff),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0x7fffffff),
|
||||
BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0xffffffff80000000LL),
|
||||
BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x0),
|
||||
BPF_LD_IMM64(R3, 0xffffffff80008000LL),
|
||||
BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_SUB | BPF_X */
|
||||
{
|
||||
"ALU_SUB_X: 3 - 1 = 2",
|
||||
|
|
Загрузка…
Ссылка в новой задаче