18c2ecf20Sopenharmony_ci/* Just make sure that JITs used udiv/umod as otherwise we get
28c2ecf20Sopenharmony_ci * an exception from INT_MIN/-1 overflow similarly as with div
38c2ecf20Sopenharmony_ci * by zero.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci{
68c2ecf20Sopenharmony_ci	"DIV32 overflow, check 1",
78c2ecf20Sopenharmony_ci	.insns = {
88c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_1, -1),
98c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
108c2ecf20Sopenharmony_ci	BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
118c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
128c2ecf20Sopenharmony_ci	},
138c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
148c2ecf20Sopenharmony_ci	.result = ACCEPT,
158c2ecf20Sopenharmony_ci	.retval = 0,
168c2ecf20Sopenharmony_ci},
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	"DIV32 overflow, check 2",
198c2ecf20Sopenharmony_ci	.insns = {
208c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
218c2ecf20Sopenharmony_ci	BPF_ALU32_IMM(BPF_DIV, BPF_REG_0, -1),
228c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
238c2ecf20Sopenharmony_ci	},
248c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
258c2ecf20Sopenharmony_ci	.result = ACCEPT,
268c2ecf20Sopenharmony_ci	.retval = 0,
278c2ecf20Sopenharmony_ci},
288c2ecf20Sopenharmony_ci{
298c2ecf20Sopenharmony_ci	"DIV64 overflow, check 1",
308c2ecf20Sopenharmony_ci	.insns = {
318c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_1, -1),
328c2ecf20Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
338c2ecf20Sopenharmony_ci	BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
348c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 0),
358c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 1),
368c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 1),
378c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
388c2ecf20Sopenharmony_ci	},
398c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
408c2ecf20Sopenharmony_ci	.result = ACCEPT,
418c2ecf20Sopenharmony_ci	.retval = 0,
428c2ecf20Sopenharmony_ci},
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	"DIV64 overflow, check 2",
458c2ecf20Sopenharmony_ci	.insns = {
468c2ecf20Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, LLONG_MIN),
478c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_DIV, BPF_REG_1, -1),
488c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 0),
498c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_1, 1),
508c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 1),
518c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
528c2ecf20Sopenharmony_ci	},
538c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
548c2ecf20Sopenharmony_ci	.result = ACCEPT,
558c2ecf20Sopenharmony_ci	.retval = 0,
568c2ecf20Sopenharmony_ci},
578c2ecf20Sopenharmony_ci{
588c2ecf20Sopenharmony_ci	"MOD32 overflow, check 1",
598c2ecf20Sopenharmony_ci	.insns = {
608c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_1, -1),
618c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
628c2ecf20Sopenharmony_ci	BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
638c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
648c2ecf20Sopenharmony_ci	},
658c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
668c2ecf20Sopenharmony_ci	.result = ACCEPT,
678c2ecf20Sopenharmony_ci	.retval = INT_MIN,
688c2ecf20Sopenharmony_ci},
698c2ecf20Sopenharmony_ci{
708c2ecf20Sopenharmony_ci	"MOD32 overflow, check 2",
718c2ecf20Sopenharmony_ci	.insns = {
728c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
738c2ecf20Sopenharmony_ci	BPF_ALU32_IMM(BPF_MOD, BPF_REG_0, -1),
748c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
758c2ecf20Sopenharmony_ci	},
768c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
778c2ecf20Sopenharmony_ci	.result = ACCEPT,
788c2ecf20Sopenharmony_ci	.retval = INT_MIN,
798c2ecf20Sopenharmony_ci},
808c2ecf20Sopenharmony_ci{
818c2ecf20Sopenharmony_ci	"MOD64 overflow, check 1",
828c2ecf20Sopenharmony_ci	.insns = {
838c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_1, -1),
848c2ecf20Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
858c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
868c2ecf20Sopenharmony_ci	BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
878c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 0),
888c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
898c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 1),
908c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
918c2ecf20Sopenharmony_ci	},
928c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
938c2ecf20Sopenharmony_ci	.result = ACCEPT,
948c2ecf20Sopenharmony_ci	.retval = 1,
958c2ecf20Sopenharmony_ci},
968c2ecf20Sopenharmony_ci{
978c2ecf20Sopenharmony_ci	"MOD64 overflow, check 2",
988c2ecf20Sopenharmony_ci	.insns = {
998c2ecf20Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
1008c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
1018c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_MOD, BPF_REG_2, -1),
1028c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 0),
1038c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
1048c2ecf20Sopenharmony_ci	BPF_MOV32_IMM(BPF_REG_0, 1),
1058c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
1068c2ecf20Sopenharmony_ci	},
1078c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
1088c2ecf20Sopenharmony_ci	.result = ACCEPT,
1098c2ecf20Sopenharmony_ci	.retval = 1,
1108c2ecf20Sopenharmony_ci},
111