diff options
author | Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> | 2016-04-05 06:02:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-06 16:47:51 -0400 |
commit | b64b50eac47046f1ecd23adac650317ccadf400f (patch) | |
tree | db04920988819b24b27d86913574f875011e983c | |
parent | c7395d6bd7cc1ca6a47b733439c364f7a423a489 (diff) |
lib/test_bpf: Add test to check for result of 32-bit add that overflows
BPF_ALU32 and BPF_ALU64 tests for adding two 32-bit values that results in
32-bit overflow.
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>
-rw-r--r-- | lib/test_bpf.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/test_bpf.c b/lib/test_bpf.c index 7e6fb49530dc..2fb31aa89b9d 100644 --- a/lib/test_bpf.c +++ b/lib/test_bpf.c | |||
@@ -2444,6 +2444,22 @@ static struct bpf_test tests[] = { | |||
2444 | { { 0, 4294967295U } }, | 2444 | { { 0, 4294967295U } }, |
2445 | }, | 2445 | }, |
2446 | { | 2446 | { |
2447 | "ALU_ADD_X: 2 + 4294967294 = 0", | ||
2448 | .u.insns_int = { | ||
2449 | BPF_LD_IMM64(R0, 2), | ||
2450 | BPF_LD_IMM64(R1, 4294967294U), | ||
2451 | BPF_ALU32_REG(BPF_ADD, R0, R1), | ||
2452 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2453 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2454 | BPF_EXIT_INSN(), | ||
2455 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2456 | BPF_EXIT_INSN(), | ||
2457 | }, | ||
2458 | INTERNAL, | ||
2459 | { }, | ||
2460 | { { 0, 1 } }, | ||
2461 | }, | ||
2462 | { | ||
2447 | "ALU64_ADD_X: 1 + 2 = 3", | 2463 | "ALU64_ADD_X: 1 + 2 = 3", |
2448 | .u.insns_int = { | 2464 | .u.insns_int = { |
2449 | BPF_LD_IMM64(R0, 1), | 2465 | BPF_LD_IMM64(R0, 1), |
@@ -2467,6 +2483,23 @@ static struct bpf_test tests[] = { | |||
2467 | { }, | 2483 | { }, |
2468 | { { 0, 4294967295U } }, | 2484 | { { 0, 4294967295U } }, |
2469 | }, | 2485 | }, |
2486 | { | ||
2487 | "ALU64_ADD_X: 2 + 4294967294 = 4294967296", | ||
2488 | .u.insns_int = { | ||
2489 | BPF_LD_IMM64(R0, 2), | ||
2490 | BPF_LD_IMM64(R1, 4294967294U), | ||
2491 | BPF_LD_IMM64(R2, 4294967296ULL), | ||
2492 | BPF_ALU64_REG(BPF_ADD, R0, R1), | ||
2493 | BPF_JMP_REG(BPF_JEQ, R0, R2, 2), | ||
2494 | BPF_MOV32_IMM(R0, 0), | ||
2495 | BPF_EXIT_INSN(), | ||
2496 | BPF_MOV32_IMM(R0, 1), | ||
2497 | BPF_EXIT_INSN(), | ||
2498 | }, | ||
2499 | INTERNAL, | ||
2500 | { }, | ||
2501 | { { 0, 1 } }, | ||
2502 | }, | ||
2470 | /* BPF_ALU | BPF_ADD | BPF_K */ | 2503 | /* BPF_ALU | BPF_ADD | BPF_K */ |
2471 | { | 2504 | { |
2472 | "ALU_ADD_K: 1 + 2 = 3", | 2505 | "ALU_ADD_K: 1 + 2 = 3", |
@@ -2502,6 +2535,21 @@ static struct bpf_test tests[] = { | |||
2502 | { { 0, 4294967295U } }, | 2535 | { { 0, 4294967295U } }, |
2503 | }, | 2536 | }, |
2504 | { | 2537 | { |
2538 | "ALU_ADD_K: 4294967294 + 2 = 0", | ||
2539 | .u.insns_int = { | ||
2540 | BPF_LD_IMM64(R0, 4294967294U), | ||
2541 | BPF_ALU32_IMM(BPF_ADD, R0, 2), | ||
2542 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2543 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2544 | BPF_EXIT_INSN(), | ||
2545 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2546 | BPF_EXIT_INSN(), | ||
2547 | }, | ||
2548 | INTERNAL, | ||
2549 | { }, | ||
2550 | { { 0, 1 } }, | ||
2551 | }, | ||
2552 | { | ||
2505 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", | 2553 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", |
2506 | .u.insns_int = { | 2554 | .u.insns_int = { |
2507 | BPF_LD_IMM64(R2, 0x0), | 2555 | BPF_LD_IMM64(R2, 0x0), |
@@ -2551,6 +2599,22 @@ static struct bpf_test tests[] = { | |||
2551 | { { 0, 2147483647 } }, | 2599 | { { 0, 2147483647 } }, |
2552 | }, | 2600 | }, |
2553 | { | 2601 | { |
2602 | "ALU64_ADD_K: 4294967294 + 2 = 4294967296", | ||
2603 | .u.insns_int = { | ||
2604 | BPF_LD_IMM64(R0, 4294967294U), | ||
2605 | BPF_LD_IMM64(R1, 4294967296ULL), | ||
2606 | BPF_ALU64_IMM(BPF_ADD, R0, 2), | ||
2607 | BPF_JMP_REG(BPF_JEQ, R0, R1, 2), | ||
2608 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2609 | BPF_EXIT_INSN(), | ||
2610 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2611 | BPF_EXIT_INSN(), | ||
2612 | }, | ||
2613 | INTERNAL, | ||
2614 | { }, | ||
2615 | { { 0, 1 } }, | ||
2616 | }, | ||
2617 | { | ||
2554 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", | 2618 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", |
2555 | .u.insns_int = { | 2619 | .u.insns_int = { |
2556 | BPF_LD_IMM64(R0, 2147483646), | 2620 | BPF_LD_IMM64(R0, 2147483646), |