mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
selftests/bpf: test references to sock_common
Make sure that returning a struct sock_common * reference invokes the reference tracking machinery in the verifier. Signed-off-by: Lorenz Bauer <lmb@cloudflare.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
dbaf2877e9
commit
5792d52df1
1 changed files with 48 additions and 0 deletions
|
@ -9,6 +9,17 @@
|
|||
.errstr = "Unreleased reference",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: leak potential reference to sock_common",
|
||||
.insns = {
|
||||
BPF_SK_LOOKUP(skc_lookup_tcp),
|
||||
BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), /* leak reference */
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.errstr = "Unreleased reference",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: leak potential reference on stack",
|
||||
.insns = {
|
||||
|
@ -49,6 +60,17 @@
|
|||
.errstr = "Unreleased reference",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: zero potential reference to sock_common",
|
||||
.insns = {
|
||||
BPF_SK_LOOKUP(skc_lookup_tcp),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0), /* leak reference */
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.errstr = "Unreleased reference",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: copy and zero potential references",
|
||||
.insns = {
|
||||
|
@ -76,6 +98,20 @@
|
|||
.errstr = "type=sock_or_null expected=sock",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: release reference to sock_common without check",
|
||||
.insns = {
|
||||
BPF_SK_LOOKUP(skc_lookup_tcp),
|
||||
/* reference in r0 may be NULL */
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
||||
BPF_MOV64_IMM(BPF_REG_2, 0),
|
||||
BPF_EMIT_CALL(BPF_FUNC_sk_release),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.errstr = "type=sock_common_or_null expected=sock",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
"reference tracking: release reference",
|
||||
.insns = {
|
||||
|
@ -88,6 +124,18 @@
|
|||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.result = ACCEPT,
|
||||
},
|
||||
{
|
||||
"reference tracking: release reference to sock_common",
|
||||
.insns = {
|
||||
BPF_SK_LOOKUP(skc_lookup_tcp),
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
|
||||
BPF_EMIT_CALL(BPF_FUNC_sk_release),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.result = ACCEPT,
|
||||
},
|
||||
{
|
||||
"reference tracking: release reference 2",
|
||||
.insns = {
|
||||
|
|
Loading…
Reference in a new issue