18c2ecf20Sopenharmony_ci{
28c2ecf20Sopenharmony_ci	"check deducing bounds from const, 1",
38c2ecf20Sopenharmony_ci	.insns = {
48c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 1),
58c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 0),
68c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
78c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
88c2ecf20Sopenharmony_ci	},
98c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
108c2ecf20Sopenharmony_ci	.errstr = "R0 tried to subtract pointer from scalar",
118c2ecf20Sopenharmony_ci	.result = REJECT,
128c2ecf20Sopenharmony_ci},
138c2ecf20Sopenharmony_ci{
148c2ecf20Sopenharmony_ci	"check deducing bounds from const, 2",
158c2ecf20Sopenharmony_ci	.insns = {
168c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 1),
178c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1),
188c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
198c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 1, 1),
208c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
218c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
228c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
238c2ecf20Sopenharmony_ci	},
248c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
258c2ecf20Sopenharmony_ci	.result_unpriv = REJECT,
268c2ecf20Sopenharmony_ci	.result = ACCEPT,
278c2ecf20Sopenharmony_ci	.retval = 1,
288c2ecf20Sopenharmony_ci},
298c2ecf20Sopenharmony_ci{
308c2ecf20Sopenharmony_ci	"check deducing bounds from const, 3",
318c2ecf20Sopenharmony_ci	.insns = {
328c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
338c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
348c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
358c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
368c2ecf20Sopenharmony_ci	},
378c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
388c2ecf20Sopenharmony_ci	.errstr = "R0 tried to subtract pointer from scalar",
398c2ecf20Sopenharmony_ci	.result = REJECT,
408c2ecf20Sopenharmony_ci},
418c2ecf20Sopenharmony_ci{
428c2ecf20Sopenharmony_ci	"check deducing bounds from const, 4",
438c2ecf20Sopenharmony_ci	.insns = {
448c2ecf20Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
458c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
468c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1),
478c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
488c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
498c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
508c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_6, BPF_REG_0),
518c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
528c2ecf20Sopenharmony_ci	},
538c2ecf20Sopenharmony_ci	.errstr_unpriv = "R6 has pointer with unsupported alu operation",
548c2ecf20Sopenharmony_ci	.result_unpriv = REJECT,
558c2ecf20Sopenharmony_ci	.result = ACCEPT,
568c2ecf20Sopenharmony_ci},
578c2ecf20Sopenharmony_ci{
588c2ecf20Sopenharmony_ci	"check deducing bounds from const, 5",
598c2ecf20Sopenharmony_ci	.insns = {
608c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
618c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1),
628c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
638c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
648c2ecf20Sopenharmony_ci	},
658c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
668c2ecf20Sopenharmony_ci	.errstr = "R0 tried to subtract pointer from scalar",
678c2ecf20Sopenharmony_ci	.result = REJECT,
688c2ecf20Sopenharmony_ci},
698c2ecf20Sopenharmony_ci{
708c2ecf20Sopenharmony_ci	"check deducing bounds from const, 6",
718c2ecf20Sopenharmony_ci	.insns = {
728c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
738c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
748c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
758c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
768c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
778c2ecf20Sopenharmony_ci	},
788c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
798c2ecf20Sopenharmony_ci	.errstr = "R0 tried to subtract pointer from scalar",
808c2ecf20Sopenharmony_ci	.result = REJECT,
818c2ecf20Sopenharmony_ci},
828c2ecf20Sopenharmony_ci{
838c2ecf20Sopenharmony_ci	"check deducing bounds from const, 7",
848c2ecf20Sopenharmony_ci	.insns = {
858c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, ~0),
868c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
878c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
888c2ecf20Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
898c2ecf20Sopenharmony_ci			    offsetof(struct __sk_buff, mark)),
908c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
918c2ecf20Sopenharmony_ci	},
928c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
938c2ecf20Sopenharmony_ci	.errstr = "dereference of modified ctx ptr",
948c2ecf20Sopenharmony_ci	.result = REJECT,
958c2ecf20Sopenharmony_ci	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
968c2ecf20Sopenharmony_ci},
978c2ecf20Sopenharmony_ci{
988c2ecf20Sopenharmony_ci	"check deducing bounds from const, 8",
998c2ecf20Sopenharmony_ci	.insns = {
1008c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, ~0),
1018c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
1028c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_0),
1038c2ecf20Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
1048c2ecf20Sopenharmony_ci			    offsetof(struct __sk_buff, mark)),
1058c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
1068c2ecf20Sopenharmony_ci	},
1078c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
1088c2ecf20Sopenharmony_ci	.errstr = "dereference of modified ctx ptr",
1098c2ecf20Sopenharmony_ci	.result = REJECT,
1108c2ecf20Sopenharmony_ci	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
1118c2ecf20Sopenharmony_ci},
1128c2ecf20Sopenharmony_ci{
1138c2ecf20Sopenharmony_ci	"check deducing bounds from const, 9",
1148c2ecf20Sopenharmony_ci	.insns = {
1158c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
1168c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
1178c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
1188c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
1198c2ecf20Sopenharmony_ci	},
1208c2ecf20Sopenharmony_ci	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
1218c2ecf20Sopenharmony_ci	.errstr = "R0 tried to subtract pointer from scalar",
1228c2ecf20Sopenharmony_ci	.result = REJECT,
1238c2ecf20Sopenharmony_ci},
1248c2ecf20Sopenharmony_ci{
1258c2ecf20Sopenharmony_ci	"check deducing bounds from const, 10",
1268c2ecf20Sopenharmony_ci	.insns = {
1278c2ecf20Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 0),
1288c2ecf20Sopenharmony_ci		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
1298c2ecf20Sopenharmony_ci		/* Marks reg as unknown. */
1308c2ecf20Sopenharmony_ci		BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0),
1318c2ecf20Sopenharmony_ci		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
1328c2ecf20Sopenharmony_ci		BPF_EXIT_INSN(),
1338c2ecf20Sopenharmony_ci	},
1348c2ecf20Sopenharmony_ci	.errstr = "math between ctx pointer and register with unbounded min value is not allowed",
1358c2ecf20Sopenharmony_ci	.result = REJECT,
1368c2ecf20Sopenharmony_ci},
137