|
@@ -422,9 +422,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
- .errstr_unpriv = "R1 subtraction from stack pointer",
|
|
|
- .result_unpriv = REJECT,
|
|
|
- .errstr = "R1 invalid mem access",
|
|
|
+ .errstr = "R1 subtraction from stack pointer",
|
|
|
.result = REJECT,
|
|
|
},
|
|
|
{
|
|
@@ -1859,9 +1857,8 @@ static struct bpf_test tests[] = {
|
|
|
BPF_MOV64_IMM(BPF_REG_0, 0),
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
- .result = ACCEPT,
|
|
|
- .result_unpriv = REJECT,
|
|
|
- .errstr_unpriv = "R1 pointer += pointer",
|
|
|
+ .result = REJECT,
|
|
|
+ .errstr = "R1 pointer += pointer",
|
|
|
},
|
|
|
{
|
|
|
"unpriv: neg pointer",
|
|
@@ -2589,7 +2586,8 @@ static struct bpf_test tests[] = {
|
|
|
BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
|
|
|
offsetof(struct __sk_buff, data)),
|
|
|
BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_4),
|
|
|
- BPF_MOV64_REG(BPF_REG_2, BPF_REG_1),
|
|
|
+ BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
|
|
|
+ offsetof(struct __sk_buff, len)),
|
|
|
BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 49),
|
|
|
BPF_ALU64_IMM(BPF_RSH, BPF_REG_2, 49),
|
|
|
BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_2),
|
|
@@ -2896,7 +2894,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_MOV64_IMM(BPF_REG_0, 0),
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
- .errstr = "invalid access to packet",
|
|
|
+ .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
@@ -3882,9 +3880,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map2 = { 3, 11 },
|
|
|
- .errstr_unpriv = "R0 pointer += pointer",
|
|
|
- .errstr = "R0 invalid mem access 'inv'",
|
|
|
- .result_unpriv = REJECT,
|
|
|
+ .errstr = "R0 pointer += pointer",
|
|
|
.result = REJECT,
|
|
|
.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
|
|
|
},
|
|
@@ -3925,7 +3921,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map1 = { 4 },
|
|
|
- .errstr = "R4 invalid mem access",
|
|
|
+ .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS
|
|
|
},
|
|
@@ -3946,7 +3942,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map1 = { 4 },
|
|
|
- .errstr = "R4 invalid mem access",
|
|
|
+ .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS
|
|
|
},
|
|
@@ -3967,7 +3963,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map1 = { 4 },
|
|
|
- .errstr = "R4 invalid mem access",
|
|
|
+ .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS
|
|
|
},
|
|
@@ -5192,10 +5188,8 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map2 = { 3 },
|
|
|
- .errstr_unpriv = "R0 bitwise operator &= on pointer",
|
|
|
- .errstr = "invalid mem access 'inv'",
|
|
|
+ .errstr = "R0 bitwise operator &= on pointer",
|
|
|
.result = REJECT,
|
|
|
- .result_unpriv = REJECT,
|
|
|
},
|
|
|
{
|
|
|
"map element value illegal alu op, 2",
|
|
@@ -5211,10 +5205,8 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map2 = { 3 },
|
|
|
- .errstr_unpriv = "R0 32-bit pointer arithmetic prohibited",
|
|
|
- .errstr = "invalid mem access 'inv'",
|
|
|
+ .errstr = "R0 32-bit pointer arithmetic prohibited",
|
|
|
.result = REJECT,
|
|
|
- .result_unpriv = REJECT,
|
|
|
},
|
|
|
{
|
|
|
"map element value illegal alu op, 3",
|
|
@@ -5230,10 +5222,8 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map2 = { 3 },
|
|
|
- .errstr_unpriv = "R0 pointer arithmetic with /= operator",
|
|
|
- .errstr = "invalid mem access 'inv'",
|
|
|
+ .errstr = "R0 pointer arithmetic with /= operator",
|
|
|
.result = REJECT,
|
|
|
- .result_unpriv = REJECT,
|
|
|
},
|
|
|
{
|
|
|
"map element value illegal alu op, 4",
|
|
@@ -6016,8 +6006,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
.fixup_map_in_map = { 3 },
|
|
|
- .errstr = "R1 type=inv expected=map_ptr",
|
|
|
- .errstr_unpriv = "R1 pointer arithmetic on CONST_PTR_TO_MAP prohibited",
|
|
|
+ .errstr = "R1 pointer arithmetic on CONST_PTR_TO_MAP prohibited",
|
|
|
.result = REJECT,
|
|
|
},
|
|
|
{
|
|
@@ -7644,6 +7633,19 @@ static struct bpf_test tests[] = {
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
},
|
|
|
+ {
|
|
|
+ "pkt_end - pkt_start is allowed",
|
|
|
+ .insns = {
|
|
|
+ BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
|
|
|
+ offsetof(struct __sk_buff, data_end)),
|
|
|
+ BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
|
|
|
+ offsetof(struct __sk_buff, data)),
|
|
|
+ BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ .result = ACCEPT,
|
|
|
+ .prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
|
|
+ },
|
|
|
{
|
|
|
"XDP pkt read, pkt_end mangling, bad access 1",
|
|
|
.insns = {
|
|
@@ -7659,7 +7661,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_MOV64_IMM(BPF_REG_0, 0),
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
- .errstr = "R1 offset is outside of the packet",
|
|
|
+ .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_XDP,
|
|
|
},
|
|
@@ -7678,7 +7680,7 @@ static struct bpf_test tests[] = {
|
|
|
BPF_MOV64_IMM(BPF_REG_0, 0),
|
|
|
BPF_EXIT_INSN(),
|
|
|
},
|
|
|
- .errstr = "R1 offset is outside of the packet",
|
|
|
+ .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
|
|
|
.result = REJECT,
|
|
|
.prog_type = BPF_PROG_TYPE_XDP,
|
|
|
},
|