• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 {
2 	"runtime/jit: tail_call within bounds, prog once",
3 	.insns = {
4 	BPF_MOV64_IMM(BPF_REG_3, 0),
5 	BPF_LD_MAP_FD(BPF_REG_2, 0),
6 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
7 	BPF_MOV64_IMM(BPF_REG_0, 1),
8 	BPF_EXIT_INSN(),
9 	},
10 	.fixup_prog1 = { 1 },
11 	.result = ACCEPT,
12 	.retval = 42,
13 },
14 {
15 	"runtime/jit: tail_call within bounds, prog loop",
16 	.insns = {
17 	BPF_MOV64_IMM(BPF_REG_3, 1),
18 	BPF_LD_MAP_FD(BPF_REG_2, 0),
19 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
20 	BPF_MOV64_IMM(BPF_REG_0, 1),
21 	BPF_EXIT_INSN(),
22 	},
23 	.fixup_prog1 = { 1 },
24 	.result = ACCEPT,
25 	.retval = 41,
26 },
27 {
28 	"runtime/jit: tail_call within bounds, no prog",
29 	.insns = {
30 	BPF_MOV64_IMM(BPF_REG_3, 2),
31 	BPF_LD_MAP_FD(BPF_REG_2, 0),
32 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
33 	BPF_MOV64_IMM(BPF_REG_0, 1),
34 	BPF_EXIT_INSN(),
35 	},
36 	.fixup_prog1 = { 1 },
37 	.result = ACCEPT,
38 	.retval = 1,
39 },
40 {
41 	"runtime/jit: tail_call out of bounds",
42 	.insns = {
43 	BPF_MOV64_IMM(BPF_REG_3, 256),
44 	BPF_LD_MAP_FD(BPF_REG_2, 0),
45 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
46 	BPF_MOV64_IMM(BPF_REG_0, 2),
47 	BPF_EXIT_INSN(),
48 	},
49 	.fixup_prog1 = { 1 },
50 	.result = ACCEPT,
51 	.retval = 2,
52 },
53 {
54 	"runtime/jit: pass negative index to tail_call",
55 	.insns = {
56 	BPF_MOV64_IMM(BPF_REG_3, -1),
57 	BPF_LD_MAP_FD(BPF_REG_2, 0),
58 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
59 	BPF_MOV64_IMM(BPF_REG_0, 2),
60 	BPF_EXIT_INSN(),
61 	},
62 	.fixup_prog1 = { 1 },
63 	.result = ACCEPT,
64 	.retval = 2,
65 },
66 {
67 	"runtime/jit: pass > 32bit index to tail_call",
68 	.insns = {
69 	BPF_LD_IMM64(BPF_REG_3, 0x100000000ULL),
70 	BPF_LD_MAP_FD(BPF_REG_2, 0),
71 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
72 	BPF_MOV64_IMM(BPF_REG_0, 2),
73 	BPF_EXIT_INSN(),
74 	},
75 	.fixup_prog1 = { 2 },
76 	.result = ACCEPT,
77 	.retval = 42,
78 	/* Verifier rewrite for unpriv skips tail call here. */
79 	.retval_unpriv = 2,
80 },
81