Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "jset: functional",
0003     .insns = {
0004     BPF_DIRECT_PKT_R2,
0005     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
0006 
0007     /* reg, bit 63 or bit 0 set, taken */
0008     BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
0009     BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
0010     BPF_EXIT_INSN(),
0011 
0012     /* reg, bit 62, not taken */
0013     BPF_LD_IMM64(BPF_REG_8, 0x4000000000000000),
0014     BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
0015     BPF_JMP_IMM(BPF_JA, 0, 0, 1),
0016     BPF_EXIT_INSN(),
0017 
0018     /* imm, any bit set, taken */
0019     BPF_JMP_IMM(BPF_JSET, BPF_REG_7, -1, 1),
0020     BPF_EXIT_INSN(),
0021 
0022     /* imm, bit 31 set, taken */
0023     BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1),
0024     BPF_EXIT_INSN(),
0025 
0026     /* all good - return r0 == 2 */
0027     BPF_MOV64_IMM(BPF_REG_0, 2),
0028     BPF_EXIT_INSN(),
0029     },
0030     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0031     .result = ACCEPT,
0032     .runs = 7,
0033     .retvals = {
0034         { .retval = 2,
0035           .data64 = { (1ULL << 63) | (1U << 31) | (1U << 0), }
0036         },
0037         { .retval = 2,
0038           .data64 = { (1ULL << 63) | (1U << 31), }
0039         },
0040         { .retval = 2,
0041           .data64 = { (1ULL << 31) | (1U << 0), }
0042         },
0043         { .retval = 2,
0044           .data64 = { (__u32)-1, }
0045         },
0046         { .retval = 2,
0047           .data64 = { ~0x4000000000000000ULL, }
0048         },
0049         { .retval = 0,
0050           .data64 = { 0, }
0051         },
0052         { .retval = 0,
0053           .data64 = { ~0ULL, }
0054         },
0055     },
0056     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0057 },
0058 {
0059     "jset: sign-extend",
0060     .insns = {
0061     BPF_DIRECT_PKT_R2,
0062     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
0063 
0064     BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1),
0065     BPF_EXIT_INSN(),
0066 
0067     BPF_MOV64_IMM(BPF_REG_0, 2),
0068     BPF_EXIT_INSN(),
0069     },
0070     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0071     .result = ACCEPT,
0072     .retval = 2,
0073     .data = { 1, 0, 0, 0, 0, 0, 0, 1, },
0074     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0075 },
0076 {
0077     "jset: known const compare",
0078     .insns = {
0079     BPF_MOV64_IMM(BPF_REG_0, 1),
0080     BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
0081     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0082     BPF_EXIT_INSN(),
0083     },
0084     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0085     .errstr_unpriv = "R9 !read_ok",
0086     .result_unpriv = REJECT,
0087     .retval = 1,
0088     .result = ACCEPT,
0089 },
0090 {
0091     "jset: known const compare bad",
0092     .insns = {
0093     BPF_MOV64_IMM(BPF_REG_0, 0),
0094     BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
0095     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0096     BPF_EXIT_INSN(),
0097     },
0098     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0099     .errstr_unpriv = "!read_ok",
0100     .result_unpriv = REJECT,
0101     .errstr = "!read_ok",
0102     .result = REJECT,
0103 },
0104 {
0105     "jset: unknown const compare taken",
0106     .insns = {
0107     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0108     BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
0109     BPF_JMP_IMM(BPF_JA, 0, 0, 1),
0110     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0111     BPF_EXIT_INSN(),
0112     },
0113     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0114     .errstr_unpriv = "!read_ok",
0115     .result_unpriv = REJECT,
0116     .errstr = "!read_ok",
0117     .result = REJECT,
0118 },
0119 {
0120     "jset: unknown const compare not taken",
0121     .insns = {
0122     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0123     BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
0124     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0125     BPF_EXIT_INSN(),
0126     },
0127     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0128     .errstr_unpriv = "!read_ok",
0129     .result_unpriv = REJECT,
0130     .errstr = "!read_ok",
0131     .result = REJECT,
0132 },
0133 {
0134     "jset: half-known const compare",
0135     .insns = {
0136     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0137     BPF_ALU64_IMM(BPF_OR, BPF_REG_0, 2),
0138     BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 3, 1),
0139     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0140     BPF_MOV64_IMM(BPF_REG_0, 0),
0141     BPF_EXIT_INSN(),
0142     },
0143     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0144     .errstr_unpriv = "R9 !read_ok",
0145     .result_unpriv = REJECT,
0146     .result = ACCEPT,
0147 },
0148 {
0149     "jset: range",
0150     .insns = {
0151     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0152     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0153     BPF_MOV64_IMM(BPF_REG_0, 0),
0154     BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0xff),
0155     BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0xf0, 3),
0156     BPF_JMP_IMM(BPF_JLT, BPF_REG_1, 0x10, 1),
0157     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0158     BPF_EXIT_INSN(),
0159     BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0x10, 1),
0160     BPF_EXIT_INSN(),
0161     BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0x10, 1),
0162     BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0163     BPF_EXIT_INSN(),
0164     },
0165     .prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
0166     .errstr_unpriv = "R9 !read_ok",
0167     .result_unpriv = REJECT,
0168     .result = ACCEPT,
0169 },