Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "raw_stack: no skb_load_bytes",
0003     .insns = {
0004     BPF_MOV64_IMM(BPF_REG_2, 4),
0005     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0006     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0007     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0008     BPF_MOV64_IMM(BPF_REG_4, 8),
0009     /* Call to skb_load_bytes() omitted. */
0010     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0011     BPF_EXIT_INSN(),
0012     },
0013     .result = REJECT,
0014     .errstr = "invalid read from stack R6 off=-8 size=8",
0015     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0016 },
0017 {
0018     "raw_stack: skb_load_bytes, negative len",
0019     .insns = {
0020     BPF_MOV64_IMM(BPF_REG_2, 4),
0021     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0022     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0023     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0024     BPF_MOV64_IMM(BPF_REG_4, -8),
0025     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0026     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0027     BPF_EXIT_INSN(),
0028     },
0029     .result = REJECT,
0030     .errstr = "R4 min value is negative",
0031     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0032 },
0033 {
0034     "raw_stack: skb_load_bytes, negative len 2",
0035     .insns = {
0036     BPF_MOV64_IMM(BPF_REG_2, 4),
0037     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0038     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0039     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0040     BPF_MOV64_IMM(BPF_REG_4, ~0),
0041     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0042     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0043     BPF_EXIT_INSN(),
0044     },
0045     .result = REJECT,
0046     .errstr = "R4 min value is negative",
0047     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0048 },
0049 {
0050     "raw_stack: skb_load_bytes, zero len",
0051     .insns = {
0052     BPF_MOV64_IMM(BPF_REG_2, 4),
0053     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0054     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0055     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0056     BPF_MOV64_IMM(BPF_REG_4, 0),
0057     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0058     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0059     BPF_EXIT_INSN(),
0060     },
0061     .result = REJECT,
0062     .errstr = "invalid zero-sized read",
0063     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0064 },
0065 {
0066     "raw_stack: skb_load_bytes, no init",
0067     .insns = {
0068     BPF_MOV64_IMM(BPF_REG_2, 4),
0069     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0070     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0071     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0072     BPF_MOV64_IMM(BPF_REG_4, 8),
0073     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0074     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0075     BPF_EXIT_INSN(),
0076     },
0077     .result = ACCEPT,
0078     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0079 },
0080 {
0081     "raw_stack: skb_load_bytes, init",
0082     .insns = {
0083     BPF_MOV64_IMM(BPF_REG_2, 4),
0084     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0085     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0086     BPF_ST_MEM(BPF_DW, BPF_REG_6, 0, 0xcafe),
0087     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0088     BPF_MOV64_IMM(BPF_REG_4, 8),
0089     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0090     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0091     BPF_EXIT_INSN(),
0092     },
0093     .result = ACCEPT,
0094     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0095 },
0096 {
0097     "raw_stack: skb_load_bytes, spilled regs around bounds",
0098     .insns = {
0099     BPF_MOV64_IMM(BPF_REG_2, 4),
0100     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0101     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -16),
0102     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, -8),
0103     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1,  8),
0104     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0105     BPF_MOV64_IMM(BPF_REG_4, 8),
0106     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0107     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, -8),
0108     BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_6,  8),
0109     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0,
0110             offsetof(struct __sk_buff, mark)),
0111     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_2,
0112             offsetof(struct __sk_buff, priority)),
0113     BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_2),
0114     BPF_EXIT_INSN(),
0115     },
0116     .result = ACCEPT,
0117     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0118 },
0119 {
0120     "raw_stack: skb_load_bytes, spilled regs corruption",
0121     .insns = {
0122     BPF_MOV64_IMM(BPF_REG_2, 4),
0123     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0124     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -8),
0125     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, 0),
0126     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0127     BPF_MOV64_IMM(BPF_REG_4, 8),
0128     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0129     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0130     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0,
0131             offsetof(struct __sk_buff, mark)),
0132     BPF_EXIT_INSN(),
0133     },
0134     .result = REJECT,
0135     .errstr = "R0 invalid mem access 'scalar'",
0136     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0137     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0138 },
0139 {
0140     "raw_stack: skb_load_bytes, spilled regs corruption 2",
0141     .insns = {
0142     BPF_MOV64_IMM(BPF_REG_2, 4),
0143     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0144     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -16),
0145     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, -8),
0146     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1,  0),
0147     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1,  8),
0148     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0149     BPF_MOV64_IMM(BPF_REG_4, 8),
0150     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0151     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, -8),
0152     BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_6,  8),
0153     BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_6,  0),
0154     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0,
0155             offsetof(struct __sk_buff, mark)),
0156     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_2,
0157             offsetof(struct __sk_buff, priority)),
0158     BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_2),
0159     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_3,
0160             offsetof(struct __sk_buff, pkt_type)),
0161     BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_3),
0162     BPF_EXIT_INSN(),
0163     },
0164     .result = REJECT,
0165     .errstr = "R3 invalid mem access 'scalar'",
0166     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0167     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0168 },
0169 {
0170     "raw_stack: skb_load_bytes, spilled regs + data",
0171     .insns = {
0172     BPF_MOV64_IMM(BPF_REG_2, 4),
0173     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0174     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -16),
0175     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, -8),
0176     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1,  0),
0177     BPF_STX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1,  8),
0178     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0179     BPF_MOV64_IMM(BPF_REG_4, 8),
0180     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0181     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, -8),
0182     BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_6,  8),
0183     BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_6,  0),
0184     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0,
0185             offsetof(struct __sk_buff, mark)),
0186     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_2,
0187             offsetof(struct __sk_buff, priority)),
0188     BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_2),
0189     BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_3),
0190     BPF_EXIT_INSN(),
0191     },
0192     .result = ACCEPT,
0193     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0194 },
0195 {
0196     "raw_stack: skb_load_bytes, invalid access 1",
0197     .insns = {
0198     BPF_MOV64_IMM(BPF_REG_2, 4),
0199     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0200     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -513),
0201     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0202     BPF_MOV64_IMM(BPF_REG_4, 8),
0203     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0204     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0205     BPF_EXIT_INSN(),
0206     },
0207     .result = REJECT,
0208     .errstr = "invalid indirect access to stack R3 off=-513 size=8",
0209     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0210 },
0211 {
0212     "raw_stack: skb_load_bytes, invalid access 2",
0213     .insns = {
0214     BPF_MOV64_IMM(BPF_REG_2, 4),
0215     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0216     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -1),
0217     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0218     BPF_MOV64_IMM(BPF_REG_4, 8),
0219     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0220     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0221     BPF_EXIT_INSN(),
0222     },
0223     .result = REJECT,
0224     .errstr = "invalid indirect access to stack R3 off=-1 size=8",
0225     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0226 },
0227 {
0228     "raw_stack: skb_load_bytes, invalid access 3",
0229     .insns = {
0230     BPF_MOV64_IMM(BPF_REG_2, 4),
0231     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0232     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 0xffffffff),
0233     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0234     BPF_MOV64_IMM(BPF_REG_4, 0xffffffff),
0235     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0236     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0237     BPF_EXIT_INSN(),
0238     },
0239     .result = REJECT,
0240     .errstr = "R4 min value is negative",
0241     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0242 },
0243 {
0244     "raw_stack: skb_load_bytes, invalid access 4",
0245     .insns = {
0246     BPF_MOV64_IMM(BPF_REG_2, 4),
0247     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0248     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -1),
0249     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0250     BPF_MOV64_IMM(BPF_REG_4, 0x7fffffff),
0251     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0252     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0253     BPF_EXIT_INSN(),
0254     },
0255     .result = REJECT,
0256     .errstr = "R4 unbounded memory access, use 'var &= const' or 'if (var < const)'",
0257     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0258 },
0259 {
0260     "raw_stack: skb_load_bytes, invalid access 5",
0261     .insns = {
0262     BPF_MOV64_IMM(BPF_REG_2, 4),
0263     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0264     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -512),
0265     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0266     BPF_MOV64_IMM(BPF_REG_4, 0x7fffffff),
0267     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0268     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0269     BPF_EXIT_INSN(),
0270     },
0271     .result = REJECT,
0272     .errstr = "R4 unbounded memory access, use 'var &= const' or 'if (var < const)'",
0273     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0274 },
0275 {
0276     "raw_stack: skb_load_bytes, invalid access 6",
0277     .insns = {
0278     BPF_MOV64_IMM(BPF_REG_2, 4),
0279     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0280     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -512),
0281     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0282     BPF_MOV64_IMM(BPF_REG_4, 0),
0283     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0284     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0285     BPF_EXIT_INSN(),
0286     },
0287     .result = REJECT,
0288     .errstr = "invalid zero-sized read",
0289     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0290 },
0291 {
0292     "raw_stack: skb_load_bytes, large access",
0293     .insns = {
0294     BPF_MOV64_IMM(BPF_REG_2, 4),
0295     BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_10),
0296     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -512),
0297     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0298     BPF_MOV64_IMM(BPF_REG_4, 512),
0299     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0300     BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
0301     BPF_EXIT_INSN(),
0302     },
0303     .result = ACCEPT,
0304     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0305 },