diff options
-rw-r--r-- | kernel/bpf/test_stub.c | 56 | ||||
-rw-r--r-- | samples/bpf/test_verifier.c | 14 |
2 files changed, 16 insertions, 54 deletions
diff --git a/kernel/bpf/test_stub.c b/kernel/bpf/test_stub.c index fcaddff4003e..0ceae1e6e8b5 100644 --- a/kernel/bpf/test_stub.c +++ b/kernel/bpf/test_stub.c | |||
@@ -18,26 +18,18 @@ struct bpf_context { | |||
18 | u64 arg2; | 18 | u64 arg2; |
19 | }; | 19 | }; |
20 | 20 | ||
21 | static u64 test_func(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5) | ||
22 | { | ||
23 | return 0; | ||
24 | } | ||
25 | |||
26 | static struct bpf_func_proto test_funcs[] = { | ||
27 | [BPF_FUNC_unspec] = { | ||
28 | .func = test_func, | ||
29 | .gpl_only = true, | ||
30 | .ret_type = RET_PTR_TO_MAP_VALUE_OR_NULL, | ||
31 | .arg1_type = ARG_CONST_MAP_PTR, | ||
32 | .arg2_type = ARG_PTR_TO_MAP_KEY, | ||
33 | }, | ||
34 | }; | ||
35 | |||
36 | static const struct bpf_func_proto *test_func_proto(enum bpf_func_id func_id) | 21 | static const struct bpf_func_proto *test_func_proto(enum bpf_func_id func_id) |
37 | { | 22 | { |
38 | if (func_id < 0 || func_id >= ARRAY_SIZE(test_funcs)) | 23 | switch (func_id) { |
24 | case BPF_FUNC_map_lookup_elem: | ||
25 | return &bpf_map_lookup_elem_proto; | ||
26 | case BPF_FUNC_map_update_elem: | ||
27 | return &bpf_map_update_elem_proto; | ||
28 | case BPF_FUNC_map_delete_elem: | ||
29 | return &bpf_map_delete_elem_proto; | ||
30 | default: | ||
39 | return NULL; | 31 | return NULL; |
40 | return &test_funcs[func_id]; | 32 | } |
41 | } | 33 | } |
42 | 34 | ||
43 | static const struct bpf_context_access { | 35 | static const struct bpf_context_access { |
@@ -78,38 +70,8 @@ static struct bpf_prog_type_list tl_prog = { | |||
78 | .type = BPF_PROG_TYPE_UNSPEC, | 70 | .type = BPF_PROG_TYPE_UNSPEC, |
79 | }; | 71 | }; |
80 | 72 | ||
81 | static struct bpf_map *test_map_alloc(union bpf_attr *attr) | ||
82 | { | ||
83 | struct bpf_map *map; | ||
84 | |||
85 | map = kzalloc(sizeof(*map), GFP_USER); | ||
86 | if (!map) | ||
87 | return ERR_PTR(-ENOMEM); | ||
88 | |||
89 | map->key_size = attr->key_size; | ||
90 | map->value_size = attr->value_size; | ||
91 | map->max_entries = attr->max_entries; | ||
92 | return map; | ||
93 | } | ||
94 | |||
95 | static void test_map_free(struct bpf_map *map) | ||
96 | { | ||
97 | kfree(map); | ||
98 | } | ||
99 | |||
100 | static struct bpf_map_ops test_map_ops = { | ||
101 | .map_alloc = test_map_alloc, | ||
102 | .map_free = test_map_free, | ||
103 | }; | ||
104 | |||
105 | static struct bpf_map_type_list tl_map = { | ||
106 | .ops = &test_map_ops, | ||
107 | .type = BPF_MAP_TYPE_UNSPEC, | ||
108 | }; | ||
109 | |||
110 | static int __init register_test_ops(void) | 73 | static int __init register_test_ops(void) |
111 | { | 74 | { |
112 | bpf_register_map_type(&tl_map); | ||
113 | bpf_register_prog_type(&tl_prog); | 75 | bpf_register_prog_type(&tl_prog); |
114 | return 0; | 76 | return 0; |
115 | } | 77 | } |
diff --git a/samples/bpf/test_verifier.c b/samples/bpf/test_verifier.c index 63402742345e..b96175e90363 100644 --- a/samples/bpf/test_verifier.c +++ b/samples/bpf/test_verifier.c | |||
@@ -261,7 +261,7 @@ static struct bpf_test tests[] = { | |||
261 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | 261 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), |
262 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | 262 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), |
263 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 263 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
264 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 264 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), |
265 | BPF_EXIT_INSN(), | 265 | BPF_EXIT_INSN(), |
266 | }, | 266 | }, |
267 | .fixup = {2}, | 267 | .fixup = {2}, |
@@ -417,7 +417,7 @@ static struct bpf_test tests[] = { | |||
417 | BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_10), | 417 | BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_10), |
418 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | 418 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), |
419 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 419 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
420 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 420 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_delete_elem), |
421 | BPF_EXIT_INSN(), | 421 | BPF_EXIT_INSN(), |
422 | }, | 422 | }, |
423 | .errstr = "fd 0 is not pointing to valid bpf_map", | 423 | .errstr = "fd 0 is not pointing to valid bpf_map", |
@@ -430,7 +430,7 @@ static struct bpf_test tests[] = { | |||
430 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | 430 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), |
431 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | 431 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), |
432 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 432 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
433 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 433 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), |
434 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0), | 434 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0), |
435 | BPF_EXIT_INSN(), | 435 | BPF_EXIT_INSN(), |
436 | }, | 436 | }, |
@@ -445,7 +445,7 @@ static struct bpf_test tests[] = { | |||
445 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | 445 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), |
446 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | 446 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), |
447 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 447 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
448 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 448 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), |
449 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), | 449 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), |
450 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 4, 0), | 450 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 4, 0), |
451 | BPF_EXIT_INSN(), | 451 | BPF_EXIT_INSN(), |
@@ -461,7 +461,7 @@ static struct bpf_test tests[] = { | |||
461 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | 461 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), |
462 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | 462 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), |
463 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 463 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
464 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 464 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), |
465 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2), | 465 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2), |
466 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0), | 466 | BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0), |
467 | BPF_EXIT_INSN(), | 467 | BPF_EXIT_INSN(), |
@@ -548,7 +548,7 @@ static struct bpf_test tests[] = { | |||
548 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0), | 548 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0), |
549 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -56), | 549 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -56), |
550 | BPF_LD_MAP_FD(BPF_REG_1, 0), | 550 | BPF_LD_MAP_FD(BPF_REG_1, 0), |
551 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | 551 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_delete_elem), |
552 | BPF_EXIT_INSN(), | 552 | BPF_EXIT_INSN(), |
553 | }, | 553 | }, |
554 | .fixup = {24}, | 554 | .fixup = {24}, |
@@ -659,7 +659,7 @@ static int create_map(void) | |||
659 | long long key, value = 0; | 659 | long long key, value = 0; |
660 | int map_fd; | 660 | int map_fd; |
661 | 661 | ||
662 | map_fd = bpf_create_map(BPF_MAP_TYPE_UNSPEC, sizeof(key), sizeof(value), 1024); | 662 | map_fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(key), sizeof(value), 1024); |
663 | if (map_fd < 0) { | 663 | if (map_fd < 0) { |
664 | printf("failed to create map '%s'\n", strerror(errno)); | 664 | printf("failed to create map '%s'\n", strerror(errno)); |
665 | } | 665 | } |