]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/bpf: Fix freplace_link segfault in tailcalls prog test
authorTengda Wu <wutengda@huaweicloud.com>
Wed, 22 Jan 2025 02:28:38 +0000 (10:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:39:19 +0000 (14:39 +0200)
[ Upstream commit a63a631c9b5cb25a1c17dd2cb18c63df91e978b1 ]

There are two bpf_link__destroy(freplace_link) calls in
test_tailcall_bpf2bpf_freplace(). After the first bpf_link__destroy()
is called, if the following bpf_map_{update,delete}_elem() throws an
exception, it will jump to the "out" label and call bpf_link__destroy()
again, causing double free and eventually leading to a segfault.

Fix it by directly resetting freplace_link to NULL after the first
bpf_link__destroy() call.

Fixes: 021611d33e78 ("selftests/bpf: Add test to verify tailcall and freplace restrictions")
Signed-off-by: Tengda Wu <wutengda@huaweicloud.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Leon Hwang <leon.hwang@linux.dev>
Link: https://lore.kernel.org/bpf/20250122022838.1079157-1-wutengda@huaweicloud.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/bpf/prog_tests/tailcalls.c

index 40f22454cf05b0d5c9300f5dc6f420710da1df57..1f0977742741f33d21f209845d1400570dac401e 100644 (file)
@@ -1599,6 +1599,7 @@ static void test_tailcall_bpf2bpf_freplace(void)
                goto out;
 
        err = bpf_link__destroy(freplace_link);
+       freplace_link = NULL;
        if (!ASSERT_OK(err, "destroy link"))
                goto out;