|
@@ -822,6 +822,65 @@ static struct bpf_test tests[] = {
|
|
.result = ACCEPT,
|
|
.result = ACCEPT,
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ "PTR_TO_STACK store/load",
|
|
|
|
+ .insns = {
|
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -10),
|
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_1, 2, 0xfaceb00c),
|
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 2),
|
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
|
+ },
|
|
|
|
+ .result = ACCEPT,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "PTR_TO_STACK store/load - bad alignment on off",
|
|
|
|
+ .insns = {
|
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
|
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_1, 2, 0xfaceb00c),
|
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 2),
|
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
|
+ },
|
|
|
|
+ .result = REJECT,
|
|
|
|
+ .errstr = "misaligned access off -6 size 8",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "PTR_TO_STACK store/load - bad alignment on reg",
|
|
|
|
+ .insns = {
|
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -10),
|
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 0xfaceb00c),
|
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 8),
|
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
|
+ },
|
|
|
|
+ .result = REJECT,
|
|
|
|
+ .errstr = "misaligned access off -2 size 8",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "PTR_TO_STACK store/load - out of bounds low",
|
|
|
|
+ .insns = {
|
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -80000),
|
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 0xfaceb00c),
|
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 8),
|
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
|
+ },
|
|
|
|
+ .result = REJECT,
|
|
|
|
+ .errstr = "invalid stack off=-79992 size=8",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "PTR_TO_STACK store/load - out of bounds high",
|
|
|
|
+ .insns = {
|
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
|
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 0xfaceb00c),
|
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 8),
|
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
|
+ },
|
|
|
|
+ .result = REJECT,
|
|
|
|
+ .errstr = "invalid stack off=0 size=8",
|
|
|
|
+ },
|
|
};
|
|
};
|
|
|
|
|
|
static int probe_filter_length(struct bpf_insn *fp)
|
|
static int probe_filter_length(struct bpf_insn *fp)
|