1/* Just make sure that JITs used udiv/umod as otherwise we get
2 * an exception from INT_MIN/-1 overflow similarly as with div
3 * by zero.
4 */
5{
6	"DIV32 overflow, check 1",
7	.insns = {
8	BPF_MOV32_IMM(BPF_REG_1, -1),
9	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
10	BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
11	BPF_EXIT_INSN(),
12	},
13	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
14	.result = ACCEPT,
15	.retval = 0,
16},
17{
18	"DIV32 overflow, check 2",
19	.insns = {
20	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
21	BPF_ALU32_IMM(BPF_DIV, BPF_REG_0, -1),
22	BPF_EXIT_INSN(),
23	},
24	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
25	.result = ACCEPT,
26	.retval = 0,
27},
28{
29	"DIV64 overflow, check 1",
30	.insns = {
31	BPF_MOV64_IMM(BPF_REG_1, -1),
32	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
33	BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
34	BPF_MOV32_IMM(BPF_REG_0, 0),
35	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 1),
36	BPF_MOV32_IMM(BPF_REG_0, 1),
37	BPF_EXIT_INSN(),
38	},
39	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
40	.result = ACCEPT,
41	.retval = 0,
42},
43{
44	"DIV64 overflow, check 2",
45	.insns = {
46	BPF_LD_IMM64(BPF_REG_1, LLONG_MIN),
47	BPF_ALU64_IMM(BPF_DIV, BPF_REG_1, -1),
48	BPF_MOV32_IMM(BPF_REG_0, 0),
49	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_1, 1),
50	BPF_MOV32_IMM(BPF_REG_0, 1),
51	BPF_EXIT_INSN(),
52	},
53	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
54	.result = ACCEPT,
55	.retval = 0,
56},
57{
58	"MOD32 overflow, check 1",
59	.insns = {
60	BPF_MOV32_IMM(BPF_REG_1, -1),
61	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
62	BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
63	BPF_EXIT_INSN(),
64	},
65	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
66	.result = ACCEPT,
67	.retval = INT_MIN,
68},
69{
70	"MOD32 overflow, check 2",
71	.insns = {
72	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
73	BPF_ALU32_IMM(BPF_MOD, BPF_REG_0, -1),
74	BPF_EXIT_INSN(),
75	},
76	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
77	.result = ACCEPT,
78	.retval = INT_MIN,
79},
80{
81	"MOD64 overflow, check 1",
82	.insns = {
83	BPF_MOV64_IMM(BPF_REG_1, -1),
84	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
85	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
86	BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
87	BPF_MOV32_IMM(BPF_REG_0, 0),
88	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
89	BPF_MOV32_IMM(BPF_REG_0, 1),
90	BPF_EXIT_INSN(),
91	},
92	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
93	.result = ACCEPT,
94	.retval = 1,
95},
96{
97	"MOD64 overflow, check 2",
98	.insns = {
99	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
100	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
101	BPF_ALU64_IMM(BPF_MOD, BPF_REG_2, -1),
102	BPF_MOV32_IMM(BPF_REG_0, 0),
103	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
104	BPF_MOV32_IMM(BPF_REG_0, 1),
105	BPF_EXIT_INSN(),
106	},
107	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
108	.result = ACCEPT,
109	.retval = 1,
110},
111