1 { 2 "jset: functional", 3 .insns = { 4 BPF_DIRECT_PKT_R2, 5 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 6 7 /* reg, bit 63 or bit 0 set, taken */ 8 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001), 9 BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 10 BPF_EXIT_INSN(), 11 12 /* reg, bit 62, not taken */ 13 BPF_LD_IMM64(BPF_REG_8, 0x4000000000000000), 14 BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 15 BPF_JMP_IMM(BPF_JA, 0, 0, 1), 16 BPF_EXIT_INSN(), 17 18 /* imm, any bit set, taken */ 19 BPF_JMP_IMM(BPF_JSET, BPF_REG_7, -1, 1), 20 BPF_EXIT_INSN(), 21 22 /* imm, bit 31 set, taken */ 23 BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 24 BPF_EXIT_INSN(), 25 26 /* all good - return r0 == 2 */ 27 BPF_MOV64_IMM(BPF_REG_0, 2), 28 BPF_EXIT_INSN(), 29 }, 30 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 31 .result = ACCEPT, 32 .runs = 7, 33 .retvals = { 34 { .retval = 2, 35 .data64 = { (1ULL << 63) | (1U << 31) | (1U << 0), } 36 }, 37 { .retval = 2, 38 .data64 = { (1ULL << 63) | (1U << 31), } 39 }, 40 { .retval = 2, 41 .data64 = { (1ULL << 31) | (1U << 0), } 42 }, 43 { .retval = 2, 44 .data64 = { (__u32)-1, } 45 }, 46 { .retval = 2, 47 .data64 = { ~0x4000000000000000ULL, } 48 }, 49 { .retval = 0, 50 .data64 = { 0, } 51 }, 52 { .retval = 0, 53 .data64 = { ~0ULL, } 54 }, 55 }, 56 }, 57 { 58 "jset: sign-extend", 59 .insns = { 60 BPF_DIRECT_PKT_R2, 61 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 62 63 BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 64 BPF_EXIT_INSN(), 65 66 BPF_MOV64_IMM(BPF_REG_0, 2), 67 BPF_EXIT_INSN(), 68 }, 69 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 70 .result = ACCEPT, 71 .retval = 2, 72 .data = { 1, 0, 0, 0, 0, 0, 0, 1, }, 73 }, 74 { 75 "jset: known const compare", 76 .insns = { 77 BPF_MOV64_IMM(BPF_REG_0, 1), 78 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 79 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 80 BPF_EXIT_INSN(), 81 }, 82 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 83 .retval_unpriv = 1, 84 .result_unpriv = ACCEPT, 85 .retval = 1, 86 .result = ACCEPT, 87 }, 88 { 89 "jset: known const compare bad", 90 .insns = { 91 BPF_MOV64_IMM(BPF_REG_0, 0), 92 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 93 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 94 BPF_EXIT_INSN(), 95 }, 96 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 97 .errstr_unpriv = "!read_ok", 98 .result_unpriv = REJECT, 99 .errstr = "!read_ok", 100 .result = REJECT, 101 }, 102 { 103 "jset: unknown const compare taken", 104 .insns = { 105 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 106 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 107 BPF_JMP_IMM(BPF_JA, 0, 0, 1), 108 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 109 BPF_EXIT_INSN(), 110 }, 111 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 112 .errstr_unpriv = "!read_ok", 113 .result_unpriv = REJECT, 114 .errstr = "!read_ok", 115 .result = REJECT, 116 }, 117 { 118 "jset: unknown const compare not taken", 119 .insns = { 120 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 121 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 122 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 123 BPF_EXIT_INSN(), 124 }, 125 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 126 .errstr_unpriv = "!read_ok", 127 .result_unpriv = REJECT, 128 .errstr = "!read_ok", 129 .result = REJECT, 130 }, 131 { 132 "jset: half-known const compare", 133 .insns = { 134 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 135 BPF_ALU64_IMM(BPF_OR, BPF_REG_0, 2), 136 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 3, 1), 137 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 138 BPF_MOV64_IMM(BPF_REG_0, 0), 139 BPF_EXIT_INSN(), 140 }, 141 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 142 .result_unpriv = ACCEPT, 143 .result = ACCEPT, 144 }, 145 { 146 "jset: range", 147 .insns = { 148 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 149 BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 150 BPF_MOV64_IMM(BPF_REG_0, 0), 151 BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0xff), 152 BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0xf0, 3), 153 BPF_JMP_IMM(BPF_JLT, BPF_REG_1, 0x10, 1), 154 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 155 BPF_EXIT_INSN(), 156 BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0x10, 1), 157 BPF_EXIT_INSN(), 158 BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0x10, 1), 159 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 160 BPF_EXIT_INSN(), 161 }, 162 .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 163 .result_unpriv = ACCEPT, 164 .result = ACCEPT, 165 }, 166