Skip to content

Commit c321022

Browse files
jsitnickiborkmann
authored andcommitted
selftests/bpf: Test allowed maps for bpf_sk_select_reuseport
Check that verifier allows passing a map of type: BPF_MAP_TYPE_REUSEPORT_SOCKARRARY, or BPF_MAP_TYPE_SOCKMAP, or BPF_MAP_TYPE_SOCKHASH ... to bpf_sk_select_reuseport helper. Suggested-by: John Fastabend <[email protected]> Signed-off-by: Jakub Sitnicki <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 063e688 commit c321022

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

tools/testing/selftests/bpf/test_verifier.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
#define MAX_INSNS BPF_MAXINSNS
5151
#define MAX_TEST_INSNS 1000000
5252
#define MAX_FIXUPS 8
53-
#define MAX_NR_MAPS 19
53+
#define MAX_NR_MAPS 20
5454
#define MAX_TEST_RUNS 8
5555
#define POINTER_VALUE 0xcafe4all
5656
#define TEST_DATA_LEN 64
@@ -86,6 +86,7 @@ struct bpf_test {
8686
int fixup_map_array_small[MAX_FIXUPS];
8787
int fixup_sk_storage_map[MAX_FIXUPS];
8888
int fixup_map_event_output[MAX_FIXUPS];
89+
int fixup_map_reuseport_array[MAX_FIXUPS];
8990
const char *errstr;
9091
const char *errstr_unpriv;
9192
uint32_t insn_processed;
@@ -637,6 +638,7 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type,
637638
int *fixup_map_array_small = test->fixup_map_array_small;
638639
int *fixup_sk_storage_map = test->fixup_sk_storage_map;
639640
int *fixup_map_event_output = test->fixup_map_event_output;
641+
int *fixup_map_reuseport_array = test->fixup_map_reuseport_array;
640642

641643
if (test->fill_helper) {
642644
test->fill_insns = calloc(MAX_TEST_INSNS, sizeof(struct bpf_insn));
@@ -806,6 +808,14 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type,
806808
fixup_map_event_output++;
807809
} while (*fixup_map_event_output);
808810
}
811+
if (*fixup_map_reuseport_array) {
812+
map_fds[19] = __create_map(BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
813+
sizeof(u32), sizeof(u64), 1, 0);
814+
do {
815+
prog[*fixup_map_reuseport_array].imm = map_fds[19];
816+
fixup_map_reuseport_array++;
817+
} while (*fixup_map_reuseport_array);
818+
}
809819
}
810820

811821
static int set_admin(bool admin)

tools/testing/selftests/bpf/verifier/sock.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,3 +586,48 @@
586586
.prog_type = BPF_PROG_TYPE_SK_SKB,
587587
.result = ACCEPT,
588588
},
589+
{
590+
"bpf_sk_select_reuseport(ctx, reuseport_array, &key, flags)",
591+
.insns = {
592+
BPF_MOV64_IMM(BPF_REG_4, 0),
593+
BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
594+
BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
595+
BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, -4),
596+
BPF_LD_MAP_FD(BPF_REG_2, 0),
597+
BPF_EMIT_CALL(BPF_FUNC_sk_select_reuseport),
598+
BPF_EXIT_INSN(),
599+
},
600+
.fixup_map_reuseport_array = { 4 },
601+
.prog_type = BPF_PROG_TYPE_SK_REUSEPORT,
602+
.result = ACCEPT,
603+
},
604+
{
605+
"bpf_sk_select_reuseport(ctx, sockmap, &key, flags)",
606+
.insns = {
607+
BPF_MOV64_IMM(BPF_REG_4, 0),
608+
BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
609+
BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
610+
BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, -4),
611+
BPF_LD_MAP_FD(BPF_REG_2, 0),
612+
BPF_EMIT_CALL(BPF_FUNC_sk_select_reuseport),
613+
BPF_EXIT_INSN(),
614+
},
615+
.fixup_map_sockmap = { 4 },
616+
.prog_type = BPF_PROG_TYPE_SK_REUSEPORT,
617+
.result = ACCEPT,
618+
},
619+
{
620+
"bpf_sk_select_reuseport(ctx, sockhash, &key, flags)",
621+
.insns = {
622+
BPF_MOV64_IMM(BPF_REG_4, 0),
623+
BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
624+
BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
625+
BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, -4),
626+
BPF_LD_MAP_FD(BPF_REG_2, 0),
627+
BPF_EMIT_CALL(BPF_FUNC_sk_select_reuseport),
628+
BPF_EXIT_INSN(),
629+
},
630+
.fixup_map_sockmap = { 4 },
631+
.prog_type = BPF_PROG_TYPE_SK_REUSEPORT,
632+
.result = ACCEPT,
633+
},

0 commit comments

Comments
 (0)