diff options
author | Alexei Starovoitov <ast@fb.com> | 2016-05-05 22:49:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-06 16:01:54 -0400 |
commit | 883e44e4de71c023d3d74e02f35ca462c67d07dc (patch) | |
tree | 5c6929abadfb41b794e04c47dbd5aaf0b8af47f7 | |
parent | 65d472fb007dd73ef28f70078f43f86bb6cc67d0 (diff) |
samples/bpf: add verifier tests
add few tests for "pointer to packet" logic of the verifier
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | samples/bpf/test_verifier.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/samples/bpf/test_verifier.c b/samples/bpf/test_verifier.c index 9eba8d1d9dcc..fe2fcec98c1f 100644 --- a/samples/bpf/test_verifier.c +++ b/samples/bpf/test_verifier.c | |||
@@ -1448,6 +1448,86 @@ static struct bpf_test tests[] = { | |||
1448 | .result = ACCEPT, | 1448 | .result = ACCEPT, |
1449 | .prog_type = BPF_PROG_TYPE_SCHED_CLS, | 1449 | .prog_type = BPF_PROG_TYPE_SCHED_CLS, |
1450 | }, | 1450 | }, |
1451 | { | ||
1452 | "pkt: test1", | ||
1453 | .insns = { | ||
1454 | BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, | ||
1455 | offsetof(struct __sk_buff, data)), | ||
1456 | BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, | ||
1457 | offsetof(struct __sk_buff, data_end)), | ||
1458 | BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), | ||
1459 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), | ||
1460 | BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), | ||
1461 | BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), | ||
1462 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
1463 | BPF_EXIT_INSN(), | ||
1464 | }, | ||
1465 | .result = ACCEPT, | ||
1466 | .prog_type = BPF_PROG_TYPE_SCHED_CLS, | ||
1467 | }, | ||
1468 | { | ||
1469 | "pkt: test2", | ||
1470 | .insns = { | ||
1471 | BPF_MOV64_IMM(BPF_REG_0, 1), | ||
1472 | BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, | ||
1473 | offsetof(struct __sk_buff, data_end)), | ||
1474 | BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, | ||
1475 | offsetof(struct __sk_buff, data)), | ||
1476 | BPF_MOV64_REG(BPF_REG_5, BPF_REG_3), | ||
1477 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 14), | ||
1478 | BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_4, 15), | ||
1479 | BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 7), | ||
1480 | BPF_LDX_MEM(BPF_B, BPF_REG_4, BPF_REG_3, 12), | ||
1481 | BPF_ALU64_IMM(BPF_MUL, BPF_REG_4, 14), | ||
1482 | BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, | ||
1483 | offsetof(struct __sk_buff, data)), | ||
1484 | BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_4), | ||
1485 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_1), | ||
1486 | BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 48), | ||
1487 | BPF_ALU64_IMM(BPF_RSH, BPF_REG_2, 48), | ||
1488 | BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_2), | ||
1489 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_3), | ||
1490 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 8), | ||
1491 | BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_1, | ||
1492 | offsetof(struct __sk_buff, data_end)), | ||
1493 | BPF_JMP_REG(BPF_JGT, BPF_REG_2, BPF_REG_1, 1), | ||
1494 | BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_3, 4), | ||
1495 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
1496 | BPF_EXIT_INSN(), | ||
1497 | }, | ||
1498 | .result = ACCEPT, | ||
1499 | .prog_type = BPF_PROG_TYPE_SCHED_CLS, | ||
1500 | }, | ||
1501 | { | ||
1502 | "pkt: test3", | ||
1503 | .insns = { | ||
1504 | BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, | ||
1505 | offsetof(struct __sk_buff, data)), | ||
1506 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
1507 | BPF_EXIT_INSN(), | ||
1508 | }, | ||
1509 | .errstr = "invalid bpf_context access off=76", | ||
1510 | .result = REJECT, | ||
1511 | .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, | ||
1512 | }, | ||
1513 | { | ||
1514 | "pkt: test4", | ||
1515 | .insns = { | ||
1516 | BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, | ||
1517 | offsetof(struct __sk_buff, data)), | ||
1518 | BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, | ||
1519 | offsetof(struct __sk_buff, data_end)), | ||
1520 | BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), | ||
1521 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), | ||
1522 | BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), | ||
1523 | BPF_STX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0), | ||
1524 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
1525 | BPF_EXIT_INSN(), | ||
1526 | }, | ||
1527 | .errstr = "cannot write", | ||
1528 | .result = REJECT, | ||
1529 | .prog_type = BPF_PROG_TYPE_SCHED_CLS, | ||
1530 | }, | ||
1451 | }; | 1531 | }; |
1452 | 1532 | ||
1453 | static int probe_filter_length(struct bpf_insn *fp) | 1533 | static int probe_filter_length(struct bpf_insn *fp) |