1 {
2 	"DIV32 by 0, zero check 1",
3 	.insns = {
4 	BPF_MOV32_IMM(BPF_REG_0, 42),
5 	BPF_MOV32_IMM(BPF_REG_1, 0),
6 	BPF_MOV32_IMM(BPF_REG_2, 1),
7 	BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
8 	BPF_EXIT_INSN(),
9 	},
10 	.result = ACCEPT,
11 	.retval = 42,
12 },
13 {
14 	"DIV32 by 0, zero check 2",
15 	.insns = {
16 	BPF_MOV32_IMM(BPF_REG_0, 42),
17 	BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
18 	BPF_MOV32_IMM(BPF_REG_2, 1),
19 	BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
20 	BPF_EXIT_INSN(),
21 	},
22 	.result = ACCEPT,
23 	.retval = 42,
24 },
25 {
26 	"DIV64 by 0, zero check",
27 	.insns = {
28 	BPF_MOV32_IMM(BPF_REG_0, 42),
29 	BPF_MOV32_IMM(BPF_REG_1, 0),
30 	BPF_MOV32_IMM(BPF_REG_2, 1),
31 	BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
32 	BPF_EXIT_INSN(),
33 	},
34 	.result = ACCEPT,
35 	.retval = 42,
36 },
37 {
38 	"MOD32 by 0, zero check 1",
39 	.insns = {
40 	BPF_MOV32_IMM(BPF_REG_0, 42),
41 	BPF_MOV32_IMM(BPF_REG_1, 0),
42 	BPF_MOV32_IMM(BPF_REG_2, 1),
43 	BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
44 	BPF_EXIT_INSN(),
45 	},
46 	.result = ACCEPT,
47 	.retval = 42,
48 },
49 {
50 	"MOD32 by 0, zero check 2",
51 	.insns = {
52 	BPF_MOV32_IMM(BPF_REG_0, 42),
53 	BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
54 	BPF_MOV32_IMM(BPF_REG_2, 1),
55 	BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
56 	BPF_EXIT_INSN(),
57 	},
58 	.result = ACCEPT,
59 	.retval = 42,
60 },
61 {
62 	"MOD64 by 0, zero check",
63 	.insns = {
64 	BPF_MOV32_IMM(BPF_REG_0, 42),
65 	BPF_MOV32_IMM(BPF_REG_1, 0),
66 	BPF_MOV32_IMM(BPF_REG_2, 1),
67 	BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
68 	BPF_EXIT_INSN(),
69 	},
70 	.result = ACCEPT,
71 	.retval = 42,
72 },
73 {
74 	"DIV32 by 0, zero check ok, cls",
75 	.insns = {
76 	BPF_MOV32_IMM(BPF_REG_0, 42),
77 	BPF_MOV32_IMM(BPF_REG_1, 2),
78 	BPF_MOV32_IMM(BPF_REG_2, 16),
79 	BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
80 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
81 	BPF_EXIT_INSN(),
82 	},
83 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
84 	.result = ACCEPT,
85 	.retval = 8,
86 },
87 {
88 	"DIV32 by 0, zero check 1, cls",
89 	.insns = {
90 	BPF_MOV32_IMM(BPF_REG_1, 0),
91 	BPF_MOV32_IMM(BPF_REG_0, 1),
92 	BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
93 	BPF_EXIT_INSN(),
94 	},
95 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
96 	.result = ACCEPT,
97 	.retval = 0,
98 },
99 {
100 	"DIV32 by 0, zero check 2, cls",
101 	.insns = {
102 	BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
103 	BPF_MOV32_IMM(BPF_REG_0, 1),
104 	BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
105 	BPF_EXIT_INSN(),
106 	},
107 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
108 	.result = ACCEPT,
109 	.retval = 0,
110 },
111 {
112 	"DIV64 by 0, zero check, cls",
113 	.insns = {
114 	BPF_MOV32_IMM(BPF_REG_1, 0),
115 	BPF_MOV32_IMM(BPF_REG_0, 1),
116 	BPF_ALU64_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
117 	BPF_EXIT_INSN(),
118 	},
119 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
120 	.result = ACCEPT,
121 	.retval = 0,
122 },
123 {
124 	"MOD32 by 0, zero check ok, cls",
125 	.insns = {
126 	BPF_MOV32_IMM(BPF_REG_0, 42),
127 	BPF_MOV32_IMM(BPF_REG_1, 3),
128 	BPF_MOV32_IMM(BPF_REG_2, 5),
129 	BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
130 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
131 	BPF_EXIT_INSN(),
132 	},
133 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
134 	.result = ACCEPT,
135 	.retval = 2,
136 },
137 {
138 	"MOD32 by 0, zero check 1, cls",
139 	.insns = {
140 	BPF_MOV32_IMM(BPF_REG_1, 0),
141 	BPF_MOV32_IMM(BPF_REG_0, 1),
142 	BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
143 	BPF_EXIT_INSN(),
144 	},
145 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
146 	.result = ACCEPT,
147 	.retval = 1,
148 },
149 {
150 	"MOD32 by 0, zero check 2, cls",
151 	.insns = {
152 	BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
153 	BPF_MOV32_IMM(BPF_REG_0, 1),
154 	BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
155 	BPF_EXIT_INSN(),
156 	},
157 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
158 	.result = ACCEPT,
159 	.retval = 1,
160 },
161 {
162 	"MOD64 by 0, zero check 1, cls",
163 	.insns = {
164 	BPF_MOV32_IMM(BPF_REG_1, 0),
165 	BPF_MOV32_IMM(BPF_REG_0, 2),
166 	BPF_ALU64_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
167 	BPF_EXIT_INSN(),
168 	},
169 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
170 	.result = ACCEPT,
171 	.retval = 2,
172 },
173 {
174 	"MOD64 by 0, zero check 2, cls",
175 	.insns = {
176 	BPF_MOV32_IMM(BPF_REG_1, 0),
177 	BPF_MOV32_IMM(BPF_REG_0, -1),
178 	BPF_ALU64_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
179 	BPF_EXIT_INSN(),
180 	},
181 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
182 	.result = ACCEPT,
183 	.retval = -1,
184 },
185