|
@@ -5631,7 +5631,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size = 0 allowed on NULL",
|
|
|
+ "helper access to variable memory: size = 0 allowed on NULL (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_MOV64_IMM(BPF_REG_1, 0),
|
|
|
BPF_MOV64_IMM(BPF_REG_2, 0),
|
|
@@ -5645,7 +5645,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size > 0 not allowed on NULL",
|
|
|
+ "helper access to variable memory: size > 0 not allowed on NULL (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_MOV64_IMM(BPF_REG_1, 0),
|
|
|
BPF_MOV64_IMM(BPF_REG_2, 0),
|
|
@@ -5663,7 +5663,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size = 0 allowed on != NULL stack pointer",
|
|
|
+ "helper access to variable memory: size = 0 allowed on != NULL stack pointer (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
|
|
@@ -5680,7 +5680,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size = 0 allowed on != NULL map pointer",
|
|
|
+ "helper access to variable memory: size = 0 allowed on != NULL map pointer (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
@@ -5702,7 +5702,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size possible = 0 allowed on != NULL stack pointer",
|
|
|
+ "helper access to variable memory: size possible = 0 allowed on != NULL stack pointer (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
@@ -5727,7 +5727,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size possible = 0 allowed on != NULL map pointer",
|
|
|
+ "helper access to variable memory: size possible = 0 allowed on != NULL map pointer (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
@@ -5750,7 +5750,7 @@ static struct bpf_test tests[] = {
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
{
|
|
|
- "helper access to variable memory: size possible = 0 allowed on != NULL packet pointer",
|
|
|
+ "helper access to variable memory: size possible = 0 allowed on != NULL packet pointer (ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
.insns = {
|
|
|
BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
|
|
|
offsetof(struct __sk_buff, data)),
|
|
@@ -5771,6 +5771,105 @@ static struct bpf_test tests[] = {
|
|
|
.result = ACCEPT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size = 0 not allowed on NULL (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_MOV64_IMM(BPF_REG_1, 0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_2, 0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .errstr = "R1 type=inv expected=fp",
|
|
|
+ .result = REJECT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size > 0 not allowed on NULL (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_MOV64_IMM(BPF_REG_1, 0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_2, 1),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .errstr = "R1 type=inv expected=fp",
|
|
|
+ .result = REJECT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size = 0 allowed on != NULL stack pointer (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_2, 0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .result = ACCEPT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size = 0 allowed on != NULL map pointer (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
+ BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
|
|
+ BPF_LD_MAP_FD(BPF_REG_1, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
|
|
|
+ BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_2, 0),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .fixup_map1 = { 3 },
|
|
|
+ .result = ACCEPT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size possible = 0 allowed on != NULL stack pointer (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
+ BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
|
|
+ BPF_LD_MAP_FD(BPF_REG_1, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
|
|
|
+ BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 6),
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_0, 0),
|
|
|
+ BPF_JMP_IMM(BPF_JGT, BPF_REG_2, 8, 4),
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .fixup_map1 = { 3 },
|
|
|
+ .result = ACCEPT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "helper access to variable memory: size possible = 0 allowed on != NULL map pointer (!ARG_PTR_TO_MEM_OR_NULL)",
|
|
|
+ .insns = {
|
|
|
+ BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
|
|
|
+ BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
|
|
+ BPF_LD_MAP_FD(BPF_REG_1, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
|
|
|
+ BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 5),
|
|
|
+ BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
|
|
+ BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_0, 0),
|
|
|
+ BPF_JMP_IMM(BPF_JGT, BPF_REG_2, 8, 2),
|
|
|
+ BPF_MOV64_IMM(BPF_REG_3, 0),
|
|
|
+ BPF_EMIT_CALL(BPF_FUNC_probe_read),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .fixup_map1 = { 3 },
|
|
|
+ .result = ACCEPT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
|
+ },
|
|
|
{
|
|
|
"helper access to variable memory: 8 bytes leak",
|
|
|
.insns = {
|