File Index
Files and directories
Sign in
FILE

dead_code.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/verifier/dead_code.c C
  1{
  2	"dead code: start",
  3	.insns = {
  4	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
  5	/* unpriv: nospec (inserted to prevent "R9 !read_ok") */
  6	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
  7	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
  8	BPF_MOV64_IMM(BPF_REG_0, 7),
  9	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
 10	BPF_EXIT_INSN(),
 11	},
 12	.result = ACCEPT,
 13	.retval = 7,
 14},
 15{
 16	"dead code: mid 1",
 17	.insns = {
 18	BPF_MOV64_IMM(BPF_REG_0, 7),
 19	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
 20	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
 21	BPF_EXIT_INSN(),
 22	},
 23	.result = ACCEPT,
 24	.retval = 7,
 25},
 26{
 27	"dead code: mid 2",
 28	.insns = {
 29	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
 30	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
 31	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
 32	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
 33	BPF_MOV64_IMM(BPF_REG_0, 7),
 34	BPF_EXIT_INSN(),
 35	BPF_MOV64_IMM(BPF_REG_0, 1),
 36	BPF_EXIT_INSN(),
 37	},
 38	.result = ACCEPT,
 39	.retval = 1,
 40},
 41{
 42	"dead code: end 1",
 43	.insns = {
 44	BPF_MOV64_IMM(BPF_REG_0, 7),
 45	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
 46	BPF_EXIT_INSN(),
 47	BPF_EXIT_INSN(),
 48	},
 49	.result = ACCEPT,
 50	.retval = 7,
 51},
 52{
 53	"dead code: end 2",
 54	.insns = {
 55	BPF_MOV64_IMM(BPF_REG_0, 7),
 56	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
 57	BPF_EXIT_INSN(),
 58	BPF_MOV64_IMM(BPF_REG_0, 12),
 59	BPF_EXIT_INSN(),
 60	},
 61	.result = ACCEPT,
 62	.retval = 7,
 63},
 64{
 65	"dead code: end 3",
 66	.insns = {
 67	BPF_MOV64_IMM(BPF_REG_0, 7),
 68	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
 69	BPF_EXIT_INSN(),
 70	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
 71	BPF_JMP_IMM(BPF_JA, 0, 0, 1),
 72	BPF_MOV64_IMM(BPF_REG_0, 12),
 73	BPF_JMP_IMM(BPF_JA, 0, 0, -5),
 74	},
 75	.result = ACCEPT,
 76	.retval = 7,
 77},
 78{
 79	"dead code: tail of main + func",
 80	.insns = {
 81	BPF_MOV64_IMM(BPF_REG_0, 7),
 82	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
 83	BPF_EXIT_INSN(),
 84	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
 85	BPF_EXIT_INSN(),
 86	BPF_MOV64_IMM(BPF_REG_0, 12),
 87	BPF_EXIT_INSN(),
 88	},
 89	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
 90	.result_unpriv = REJECT,
 91	.result = ACCEPT,
 92	.retval = 7,
 93},
 94{
 95	"dead code: tail of main + two functions",
 96	.insns = {
 97	BPF_MOV64_IMM(BPF_REG_0, 7),
 98	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
 99	BPF_EXIT_INSN(),
100	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
101	BPF_EXIT_INSN(),
102	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
103	BPF_EXIT_INSN(),
104	BPF_MOV64_IMM(BPF_REG_0, 12),
105	BPF_EXIT_INSN(),
106	},
107	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
108	.result_unpriv = REJECT,
109	.result = ACCEPT,
110	.retval = 7,
111},
112{
113	"dead code: function in the middle and mid of another func",
114	.insns = {
115	BPF_MOV64_IMM(BPF_REG_1, 7),
116	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
117	BPF_EXIT_INSN(),
118	BPF_MOV64_IMM(BPF_REG_0, 12),
119	BPF_EXIT_INSN(),
120	BPF_MOV64_IMM(BPF_REG_0, 7),
121	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
122	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
123	BPF_EXIT_INSN(),
124	},
125	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
126	.result_unpriv = REJECT,
127	.result = ACCEPT,
128	.retval = 7,
129},
130{
131	"dead code: middle of main before call",
132	.insns = {
133	BPF_MOV64_IMM(BPF_REG_1, 2),
134	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
135	BPF_MOV64_IMM(BPF_REG_1, 5),
136	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
137	BPF_EXIT_INSN(),
138	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
139	BPF_EXIT_INSN(),
140	},
141	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
142	.result_unpriv = REJECT,
143	.result = ACCEPT,
144	.retval = 2,
145},
146{
147	"dead code: start of a function",
148	.insns = {
149	BPF_MOV64_IMM(BPF_REG_1, 2),
150	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
151	BPF_EXIT_INSN(),
152	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
153	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
154	BPF_EXIT_INSN(),
155	},
156	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
157	.result_unpriv = REJECT,
158	.result = ACCEPT,
159	.retval = 2,
160},
161{
162	"dead code: zero extension",
163	.insns = {
164	BPF_MOV64_IMM(BPF_REG_0, 0),
165	BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
166	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
167	BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
168	BPF_EXIT_INSN(),
169	},
170	.result = ACCEPT,
171	.retval = 0,
172},
~/ Read-only file preview.