Message ID | 20200729045056.3363921-1-andriin@fb.com |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf-next] selftests/bpf: don't destroy failed link | expand |
On Tue, Jul 28, 2020 at 11:51 PM Andrii Nakryiko <andriin@fb.com> wrote: > > Check that link is NULL or proper pointer before invoking bpf_link__destroy(). > Not doing this causes crash in test_progs, when cg_storage_multi selftest > fails. > > Cc: YiFei Zhu <zhuyifei@google.com> > Fixes: 3573f384014f ("selftests/bpf: Test CGROUP_STORAGE behavior on shared egress + ingress") > Signed-off-by: Andrii Nakryiko <andriin@fb.com> > --- > .../bpf/prog_tests/cg_storage_multi.c | 42 ++++++++++++------- > 1 file changed, 28 insertions(+), 14 deletions(-) > Awesome! Thanks for the fix. I did not realize the return was a -errno rather than NULL like open_and_load.
On Tue, Jul 28, 2020 at 9:54 PM Andrii Nakryiko <andriin@fb.com> wrote: > > Check that link is NULL or proper pointer before invoking bpf_link__destroy(). > Not doing this causes crash in test_progs, when cg_storage_multi selftest > fails. > > Cc: YiFei Zhu <zhuyifei@google.com> > Fixes: 3573f384014f ("selftests/bpf: Test CGROUP_STORAGE behavior on shared egress + ingress") > Signed-off-by: Andrii Nakryiko <andriin@fb.com> Acked-by: Song Liu <songliubraving@fb.com> btw: maybe we can move the IS_ERR() check to bpf_link__destroy()? > --- > .../bpf/prog_tests/cg_storage_multi.c | 42 ++++++++++++------- > 1 file changed, 28 insertions(+), 14 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c b/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c > index c67d8c076a34..643dfa35419c 100644 > --- a/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c > +++ b/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c > @@ -147,8 +147,10 @@ static void test_egress_only(int parent_cgroup_fd, int child_cgroup_fd) > goto close_bpf_object; > > close_bpf_object: > - bpf_link__destroy(parent_link); > - bpf_link__destroy(child_link); > + if (!IS_ERR(parent_link)) > + bpf_link__destroy(parent_link); > + if (!IS_ERR(child_link)) > + bpf_link__destroy(child_link); > > cg_storage_multi_egress_only__destroy(obj); > } > @@ -262,12 +264,18 @@ static void test_isolated(int parent_cgroup_fd, int child_cgroup_fd) > goto close_bpf_object; > > close_bpf_object: > - bpf_link__destroy(parent_egress1_link); > - bpf_link__destroy(parent_egress2_link); > - bpf_link__destroy(parent_ingress_link); > - bpf_link__destroy(child_egress1_link); > - bpf_link__destroy(child_egress2_link); > - bpf_link__destroy(child_ingress_link); > + if (!IS_ERR(parent_egress1_link)) > + bpf_link__destroy(parent_egress1_link); > + if (!IS_ERR(parent_egress2_link)) > + bpf_link__destroy(parent_egress2_link); > + if (!IS_ERR(parent_ingress_link)) > + bpf_link__destroy(parent_ingress_link); > + if (!IS_ERR(child_egress1_link)) > + bpf_link__destroy(child_egress1_link); > + if (!IS_ERR(child_egress2_link)) > + bpf_link__destroy(child_egress2_link); > + if (!IS_ERR(child_ingress_link)) > + bpf_link__destroy(child_ingress_link); > > cg_storage_multi_isolated__destroy(obj); > } > @@ -367,12 +375,18 @@ static void test_shared(int parent_cgroup_fd, int child_cgroup_fd) > goto close_bpf_object; > > close_bpf_object: > - bpf_link__destroy(parent_egress1_link); > - bpf_link__destroy(parent_egress2_link); > - bpf_link__destroy(parent_ingress_link); > - bpf_link__destroy(child_egress1_link); > - bpf_link__destroy(child_egress2_link); > - bpf_link__destroy(child_ingress_link); > + if (!IS_ERR(parent_egress1_link)) > + bpf_link__destroy(parent_egress1_link); > + if (!IS_ERR(parent_egress2_link)) > + bpf_link__destroy(parent_egress2_link); > + if (!IS_ERR(parent_ingress_link)) > + bpf_link__destroy(parent_ingress_link); > + if (!IS_ERR(child_egress1_link)) > + bpf_link__destroy(child_egress1_link); > + if (!IS_ERR(child_egress2_link)) > + bpf_link__destroy(child_egress2_link); > + if (!IS_ERR(child_ingress_link)) > + bpf_link__destroy(child_ingress_link); > > cg_storage_multi_shared__destroy(obj); > } > -- > 2.24.1 >
On Tue, Jul 28, 2020 at 10:47 PM Song Liu <song@kernel.org> wrote: > > On Tue, Jul 28, 2020 at 9:54 PM Andrii Nakryiko <andriin@fb.com> wrote: > > > > Check that link is NULL or proper pointer before invoking bpf_link__destroy(). > > Not doing this causes crash in test_progs, when cg_storage_multi selftest > > fails. > > > > Cc: YiFei Zhu <zhuyifei@google.com> > > Fixes: 3573f384014f ("selftests/bpf: Test CGROUP_STORAGE behavior on shared egress + ingress") > > Signed-off-by: Andrii Nakryiko <andriin@fb.com> > > Acked-by: Song Liu <songliubraving@fb.com> > > btw: maybe we can move the IS_ERR() check to bpf_link__destroy()? Yeah, given how common this mistake seems to be, that wouldn't be a bad idea. > > > --- > > .../bpf/prog_tests/cg_storage_multi.c | 42 ++++++++++++------- > > 1 file changed, 28 insertions(+), 14 deletions(-) > > [...]
On 7/29/20 6:50 AM, Andrii Nakryiko wrote: > Check that link is NULL or proper pointer before invoking bpf_link__destroy(). > Not doing this causes crash in test_progs, when cg_storage_multi selftest > fails. > > Cc: YiFei Zhu <zhuyifei@google.com> > Fixes: 3573f384014f ("selftests/bpf: Test CGROUP_STORAGE behavior on shared egress + ingress") > Signed-off-by: Andrii Nakryiko <andriin@fb.com> Applied, thanks!
diff --git a/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c b/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c index c67d8c076a34..643dfa35419c 100644 --- a/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c +++ b/tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c @@ -147,8 +147,10 @@ static void test_egress_only(int parent_cgroup_fd, int child_cgroup_fd) goto close_bpf_object; close_bpf_object: - bpf_link__destroy(parent_link); - bpf_link__destroy(child_link); + if (!IS_ERR(parent_link)) + bpf_link__destroy(parent_link); + if (!IS_ERR(child_link)) + bpf_link__destroy(child_link); cg_storage_multi_egress_only__destroy(obj); } @@ -262,12 +264,18 @@ static void test_isolated(int parent_cgroup_fd, int child_cgroup_fd) goto close_bpf_object; close_bpf_object: - bpf_link__destroy(parent_egress1_link); - bpf_link__destroy(parent_egress2_link); - bpf_link__destroy(parent_ingress_link); - bpf_link__destroy(child_egress1_link); - bpf_link__destroy(child_egress2_link); - bpf_link__destroy(child_ingress_link); + if (!IS_ERR(parent_egress1_link)) + bpf_link__destroy(parent_egress1_link); + if (!IS_ERR(parent_egress2_link)) + bpf_link__destroy(parent_egress2_link); + if (!IS_ERR(parent_ingress_link)) + bpf_link__destroy(parent_ingress_link); + if (!IS_ERR(child_egress1_link)) + bpf_link__destroy(child_egress1_link); + if (!IS_ERR(child_egress2_link)) + bpf_link__destroy(child_egress2_link); + if (!IS_ERR(child_ingress_link)) + bpf_link__destroy(child_ingress_link); cg_storage_multi_isolated__destroy(obj); } @@ -367,12 +375,18 @@ static void test_shared(int parent_cgroup_fd, int child_cgroup_fd) goto close_bpf_object; close_bpf_object: - bpf_link__destroy(parent_egress1_link); - bpf_link__destroy(parent_egress2_link); - bpf_link__destroy(parent_ingress_link); - bpf_link__destroy(child_egress1_link); - bpf_link__destroy(child_egress2_link); - bpf_link__destroy(child_ingress_link); + if (!IS_ERR(parent_egress1_link)) + bpf_link__destroy(parent_egress1_link); + if (!IS_ERR(parent_egress2_link)) + bpf_link__destroy(parent_egress2_link); + if (!IS_ERR(parent_ingress_link)) + bpf_link__destroy(parent_ingress_link); + if (!IS_ERR(child_egress1_link)) + bpf_link__destroy(child_egress1_link); + if (!IS_ERR(child_egress2_link)) + bpf_link__destroy(child_egress2_link); + if (!IS_ERR(child_ingress_link)) + bpf_link__destroy(child_ingress_link); cg_storage_multi_shared__destroy(obj); }
Check that link is NULL or proper pointer before invoking bpf_link__destroy(). Not doing this causes crash in test_progs, when cg_storage_multi selftest fails. Cc: YiFei Zhu <zhuyifei@google.com> Fixes: 3573f384014f ("selftests/bpf: Test CGROUP_STORAGE behavior on shared egress + ingress") Signed-off-by: Andrii Nakryiko <andriin@fb.com> --- .../bpf/prog_tests/cg_storage_multi.c | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-)