diff options
-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) |