Skip to content

Commit e710bcc

Browse files
iamkafaiAlexei Starovoitov
authored andcommitted
bpf: selftest: Ensure the return value of bpf_skc_to helpers must be checked
This patch tests: int bpf_cls(struct __sk_buff *skb) { /* REG_6: sk * REG_7: tp * REG_8: req_sk */ sk = skb->sk; if (!sk) return 0; tp = bpf_skc_to_tcp_sock(sk); req_sk = bpf_skc_to_tcp_request_sock(sk); if (!req_sk) return 0; /* !tp has not been tested, so verifier should reject. */ return *(__u8 *)tp; } Signed-off-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20201019194219.1051314-1-kafai@fb.com
1 parent 93c230e commit e710bcc

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

  • tools/testing/selftests/bpf/verifier

tools/testing/selftests/bpf/verifier/sock.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,3 +631,28 @@
631631
.prog_type = BPF_PROG_TYPE_SK_REUSEPORT,
632632
.result = ACCEPT,
633633
},
634+
{
635+
"mark null check on return value of bpf_skc_to helpers",
636+
.insns = {
637+
BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
638+
BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
639+
BPF_MOV64_IMM(BPF_REG_0, 0),
640+
BPF_EXIT_INSN(),
641+
BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
642+
BPF_EMIT_CALL(BPF_FUNC_skc_to_tcp_sock),
643+
BPF_MOV64_REG(BPF_REG_7, BPF_REG_0),
644+
BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
645+
BPF_EMIT_CALL(BPF_FUNC_skc_to_tcp_request_sock),
646+
BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
647+
BPF_JMP_IMM(BPF_JNE, BPF_REG_8, 0, 2),
648+
BPF_MOV64_IMM(BPF_REG_0, 0),
649+
BPF_EXIT_INSN(),
650+
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_7, 0),
651+
BPF_EXIT_INSN(),
652+
},
653+
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
654+
.result = REJECT,
655+
.errstr = "invalid mem access",
656+
.result_unpriv = REJECT,
657+
.errstr_unpriv = "unknown func",
658+
},

0 commit comments

Comments
 (0)