Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "invalid direct packet write for LWT_IN",
0003     .insns = {
0004     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0005             offsetof(struct __sk_buff, data)),
0006     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0007             offsetof(struct __sk_buff, data_end)),
0008     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0009     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0010     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0011     BPF_STX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0),
0012     BPF_MOV64_IMM(BPF_REG_0, 0),
0013     BPF_EXIT_INSN(),
0014     },
0015     .errstr = "cannot write into packet",
0016     .result = REJECT,
0017     .prog_type = BPF_PROG_TYPE_LWT_IN,
0018 },
0019 {
0020     "invalid direct packet write for LWT_OUT",
0021     .insns = {
0022     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0023             offsetof(struct __sk_buff, data)),
0024     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0025             offsetof(struct __sk_buff, data_end)),
0026     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0027     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0028     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0029     BPF_STX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0),
0030     BPF_MOV64_IMM(BPF_REG_0, 0),
0031     BPF_EXIT_INSN(),
0032     },
0033     .errstr = "cannot write into packet",
0034     .result = REJECT,
0035     .prog_type = BPF_PROG_TYPE_LWT_OUT,
0036 },
0037 {
0038     "direct packet write for LWT_XMIT",
0039     .insns = {
0040     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0041             offsetof(struct __sk_buff, data)),
0042     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0043             offsetof(struct __sk_buff, data_end)),
0044     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0045     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0046     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0047     BPF_STX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0),
0048     BPF_MOV64_IMM(BPF_REG_0, 0),
0049     BPF_EXIT_INSN(),
0050     },
0051     .result = ACCEPT,
0052     .prog_type = BPF_PROG_TYPE_LWT_XMIT,
0053 },
0054 {
0055     "direct packet read for LWT_IN",
0056     .insns = {
0057     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0058             offsetof(struct __sk_buff, data)),
0059     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0060             offsetof(struct __sk_buff, data_end)),
0061     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0062     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0063     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0064     BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
0065     BPF_MOV64_IMM(BPF_REG_0, 0),
0066     BPF_EXIT_INSN(),
0067     },
0068     .result = ACCEPT,
0069     .prog_type = BPF_PROG_TYPE_LWT_IN,
0070 },
0071 {
0072     "direct packet read for LWT_OUT",
0073     .insns = {
0074     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0075             offsetof(struct __sk_buff, data)),
0076     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0077             offsetof(struct __sk_buff, data_end)),
0078     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0079     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0080     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0081     BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
0082     BPF_MOV64_IMM(BPF_REG_0, 0),
0083     BPF_EXIT_INSN(),
0084     },
0085     .result = ACCEPT,
0086     .prog_type = BPF_PROG_TYPE_LWT_OUT,
0087 },
0088 {
0089     "direct packet read for LWT_XMIT",
0090     .insns = {
0091     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0092             offsetof(struct __sk_buff, data)),
0093     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0094             offsetof(struct __sk_buff, data_end)),
0095     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0096     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0097     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
0098     BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
0099     BPF_MOV64_IMM(BPF_REG_0, 0),
0100     BPF_EXIT_INSN(),
0101     },
0102     .result = ACCEPT,
0103     .prog_type = BPF_PROG_TYPE_LWT_XMIT,
0104 },
0105 {
0106     "overlapping checks for direct packet access",
0107     .insns = {
0108     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0109             offsetof(struct __sk_buff, data)),
0110     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0111             offsetof(struct __sk_buff, data_end)),
0112     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0113     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
0114     BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 4),
0115     BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
0116     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 6),
0117     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
0118     BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_2, 6),
0119     BPF_MOV64_IMM(BPF_REG_0, 0),
0120     BPF_EXIT_INSN(),
0121     },
0122     .result = ACCEPT,
0123     .prog_type = BPF_PROG_TYPE_LWT_XMIT,
0124 },
0125 {
0126     "make headroom for LWT_XMIT",
0127     .insns = {
0128     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0129     BPF_MOV64_IMM(BPF_REG_2, 34),
0130     BPF_MOV64_IMM(BPF_REG_3, 0),
0131     BPF_EMIT_CALL(BPF_FUNC_skb_change_head),
0132     /* split for s390 to succeed */
0133     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0134     BPF_MOV64_IMM(BPF_REG_2, 42),
0135     BPF_MOV64_IMM(BPF_REG_3, 0),
0136     BPF_EMIT_CALL(BPF_FUNC_skb_change_head),
0137     BPF_MOV64_IMM(BPF_REG_0, 0),
0138     BPF_EXIT_INSN(),
0139     },
0140     .result = ACCEPT,
0141     .prog_type = BPF_PROG_TYPE_LWT_XMIT,
0142 },
0143 {
0144     "invalid access of tc_classid for LWT_IN",
0145     .insns = {
0146     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0147             offsetof(struct __sk_buff, tc_classid)),
0148     BPF_EXIT_INSN(),
0149     },
0150     .result = REJECT,
0151     .errstr = "invalid bpf_context access",
0152 },
0153 {
0154     "invalid access of tc_classid for LWT_OUT",
0155     .insns = {
0156     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0157             offsetof(struct __sk_buff, tc_classid)),
0158     BPF_EXIT_INSN(),
0159     },
0160     .result = REJECT,
0161     .errstr = "invalid bpf_context access",
0162 },
0163 {
0164     "invalid access of tc_classid for LWT_XMIT",
0165     .insns = {
0166     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0167             offsetof(struct __sk_buff, tc_classid)),
0168     BPF_EXIT_INSN(),
0169     },
0170     .result = REJECT,
0171     .errstr = "invalid bpf_context access",
0172 },
0173 {
0174     "check skb->tc_classid half load not permitted for lwt prog",
0175     .insns = {
0176     BPF_MOV64_IMM(BPF_REG_0, 0),
0177 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
0178     BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0179             offsetof(struct __sk_buff, tc_classid)),
0180 #else
0181     BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0182             offsetof(struct __sk_buff, tc_classid) + 2),
0183 #endif
0184     BPF_EXIT_INSN(),
0185     },
0186     .result = REJECT,
0187     .errstr = "invalid bpf_context access",
0188     .prog_type = BPF_PROG_TYPE_LWT_IN,
0189 },