0001 {
0002 "DIV32 by 0, zero check 1",
0003 .insns = {
0004 BPF_MOV32_IMM(BPF_REG_0, 42),
0005 BPF_MOV32_IMM(BPF_REG_1, 0),
0006 BPF_MOV32_IMM(BPF_REG_2, 1),
0007 BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
0008 BPF_EXIT_INSN(),
0009 },
0010 .result = ACCEPT,
0011 .retval = 42,
0012 },
0013 {
0014 "DIV32 by 0, zero check 2",
0015 .insns = {
0016 BPF_MOV32_IMM(BPF_REG_0, 42),
0017 BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
0018 BPF_MOV32_IMM(BPF_REG_2, 1),
0019 BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
0020 BPF_EXIT_INSN(),
0021 },
0022 .result = ACCEPT,
0023 .retval = 42,
0024 },
0025 {
0026 "DIV64 by 0, zero check",
0027 .insns = {
0028 BPF_MOV32_IMM(BPF_REG_0, 42),
0029 BPF_MOV32_IMM(BPF_REG_1, 0),
0030 BPF_MOV32_IMM(BPF_REG_2, 1),
0031 BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
0032 BPF_EXIT_INSN(),
0033 },
0034 .result = ACCEPT,
0035 .retval = 42,
0036 },
0037 {
0038 "MOD32 by 0, zero check 1",
0039 .insns = {
0040 BPF_MOV32_IMM(BPF_REG_0, 42),
0041 BPF_MOV32_IMM(BPF_REG_1, 0),
0042 BPF_MOV32_IMM(BPF_REG_2, 1),
0043 BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
0044 BPF_EXIT_INSN(),
0045 },
0046 .result = ACCEPT,
0047 .retval = 42,
0048 },
0049 {
0050 "MOD32 by 0, zero check 2",
0051 .insns = {
0052 BPF_MOV32_IMM(BPF_REG_0, 42),
0053 BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
0054 BPF_MOV32_IMM(BPF_REG_2, 1),
0055 BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
0056 BPF_EXIT_INSN(),
0057 },
0058 .result = ACCEPT,
0059 .retval = 42,
0060 },
0061 {
0062 "MOD64 by 0, zero check",
0063 .insns = {
0064 BPF_MOV32_IMM(BPF_REG_0, 42),
0065 BPF_MOV32_IMM(BPF_REG_1, 0),
0066 BPF_MOV32_IMM(BPF_REG_2, 1),
0067 BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
0068 BPF_EXIT_INSN(),
0069 },
0070 .result = ACCEPT,
0071 .retval = 42,
0072 },
0073 {
0074 "DIV32 by 0, zero check ok, cls",
0075 .insns = {
0076 BPF_MOV32_IMM(BPF_REG_0, 42),
0077 BPF_MOV32_IMM(BPF_REG_1, 2),
0078 BPF_MOV32_IMM(BPF_REG_2, 16),
0079 BPF_ALU32_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
0080 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0081 BPF_EXIT_INSN(),
0082 },
0083 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0084 .result = ACCEPT,
0085 .retval = 8,
0086 },
0087 {
0088 "DIV32 by 0, zero check 1, cls",
0089 .insns = {
0090 BPF_MOV32_IMM(BPF_REG_1, 0),
0091 BPF_MOV32_IMM(BPF_REG_0, 1),
0092 BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
0093 BPF_EXIT_INSN(),
0094 },
0095 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0096 .result = ACCEPT,
0097 .retval = 0,
0098 },
0099 {
0100 "DIV32 by 0, zero check 2, cls",
0101 .insns = {
0102 BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
0103 BPF_MOV32_IMM(BPF_REG_0, 1),
0104 BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
0105 BPF_EXIT_INSN(),
0106 },
0107 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0108 .result = ACCEPT,
0109 .retval = 0,
0110 },
0111 {
0112 "DIV64 by 0, zero check, cls",
0113 .insns = {
0114 BPF_MOV32_IMM(BPF_REG_1, 0),
0115 BPF_MOV32_IMM(BPF_REG_0, 1),
0116 BPF_ALU64_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
0117 BPF_EXIT_INSN(),
0118 },
0119 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0120 .result = ACCEPT,
0121 .retval = 0,
0122 },
0123 {
0124 "MOD32 by 0, zero check ok, cls",
0125 .insns = {
0126 BPF_MOV32_IMM(BPF_REG_0, 42),
0127 BPF_MOV32_IMM(BPF_REG_1, 3),
0128 BPF_MOV32_IMM(BPF_REG_2, 5),
0129 BPF_ALU32_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
0130 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0131 BPF_EXIT_INSN(),
0132 },
0133 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0134 .result = ACCEPT,
0135 .retval = 2,
0136 },
0137 {
0138 "MOD32 by 0, zero check 1, cls",
0139 .insns = {
0140 BPF_MOV32_IMM(BPF_REG_1, 0),
0141 BPF_MOV32_IMM(BPF_REG_0, 1),
0142 BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
0143 BPF_EXIT_INSN(),
0144 },
0145 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0146 .result = ACCEPT,
0147 .retval = 1,
0148 },
0149 {
0150 "MOD32 by 0, zero check 2, cls",
0151 .insns = {
0152 BPF_LD_IMM64(BPF_REG_1, 0xffffffff00000000LL),
0153 BPF_MOV32_IMM(BPF_REG_0, 1),
0154 BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
0155 BPF_EXIT_INSN(),
0156 },
0157 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0158 .result = ACCEPT,
0159 .retval = 1,
0160 },
0161 {
0162 "MOD64 by 0, zero check 1, cls",
0163 .insns = {
0164 BPF_MOV32_IMM(BPF_REG_1, 0),
0165 BPF_MOV32_IMM(BPF_REG_0, 2),
0166 BPF_ALU64_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
0167 BPF_EXIT_INSN(),
0168 },
0169 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0170 .result = ACCEPT,
0171 .retval = 2,
0172 },
0173 {
0174 "MOD64 by 0, zero check 2, cls",
0175 .insns = {
0176 BPF_MOV32_IMM(BPF_REG_1, 0),
0177 BPF_MOV32_IMM(BPF_REG_0, -1),
0178 BPF_ALU64_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
0179 BPF_EXIT_INSN(),
0180 },
0181 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0182 .result = ACCEPT,
0183 .retval = -1,
0184 },