bpf: add couple of test cases for div/mod by zero
Add couple of missing test cases for eBPF div/mod by zero to the new test_verifier prog runtime feature. Also one for an empty prog and only exit. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Родитель
fcd1c91771
Коммит
87c1793b1b
|
@ -101,6 +101,93 @@ static struct bpf_test tests[] = {
|
|||
.result = ACCEPT,
|
||||
.retval = -3,
|
||||
},
|
||||
{
|
||||
"DIV32 by 0, zero check 1",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_MOV32_IMM(BPF_REG_1, 0),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"DIV32 by 0, zero check 2",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"DIV64 by 0, zero check",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_MOV32_IMM(BPF_REG_1, 0),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"MOD32 by 0, zero check 1",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_MOV32_IMM(BPF_REG_1, 0),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"MOD32 by 0, zero check 2",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"MOD64 by 0, zero check",
|
||||
.insns = {
|
||||
BPF_MOV32_IMM(BPF_REG_0, 42),
|
||||
BPF_MOV32_IMM(BPF_REG_1, 0),
|
||||
BPF_MOV32_IMM(BPF_REG_2, 1),
|
||||
BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 0,
|
||||
},
|
||||
{
|
||||
"empty prog",
|
||||
.insns = {
|
||||
},
|
||||
.errstr = "last insn is not an exit or jmp",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"only exit insn",
|
||||
.insns = {
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.errstr = "R0 !read_ok",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"unreachable",
|
||||
.insns = {
|
||||
|
|
Загрузка…
Ссылка в новой задаче