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 /samples | |
| 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>
Diffstat (limited to 'samples')
| -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) |
