Patch "bpf, selftests: Fix racing issue in btf_skc_cls_ingress test" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    bpf, selftests: Fix racing issue in btf_skc_cls_ingress test

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bpf-selftests-fix-racing-issue-in-btf_skc_cls_ingres.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 46393a2f3428058e67df2837453375ab4bcc77c1
Author: Martin KaFai Lau <kafai@xxxxxx>
Date:   Thu Dec 16 11:16:30 2021 -0800

    bpf, selftests: Fix racing issue in btf_skc_cls_ingress test
    
    [ Upstream commit c2fcbf81c332b42382a0c439bfe2414a241e4f5b ]
    
    The libbpf CI reported occasional failure in btf_skc_cls_ingress:
    
      test_syncookie:FAIL:Unexpected syncookie states gen_cookie:80326634 recv_cookie:0
      bpf prog error at line 97
    
    "error at line 97" means the bpf prog cannot find the listening socket
    when the final ack is received.  It then skipped processing
    the syncookie in the final ack which then led to "recv_cookie:0".
    
    The problem is the userspace program did not do accept() and went
    ahead to close(listen_fd) before the kernel (and the bpf prog) had
    a chance to process the final ack.
    
    The fix is to add accept() call so that the userspace will wait for
    the kernel to finish processing the final ack first before close()-ing
    everything.
    
    Fixes: 9a856cae2217 ("bpf: selftest: Add test_btf_skc_cls_ingress")
    Reported-by: Andrii Nakryiko <andrii@xxxxxxxxxx>
    Signed-off-by: Martin KaFai Lau <kafai@xxxxxx>
    Signed-off-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/20211216191630.466151-1-kafai@xxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c b/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c
index 86ccf37e26b3f..d16fd888230a5 100644
--- a/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c
+++ b/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c
@@ -90,7 +90,7 @@ static void print_err_line(void)
 
 static void test_conn(void)
 {
-	int listen_fd = -1, cli_fd = -1, err;
+	int listen_fd = -1, cli_fd = -1, srv_fd = -1, err;
 	socklen_t addrlen = sizeof(srv_sa6);
 	int srv_port;
 
@@ -112,6 +112,10 @@ static void test_conn(void)
 	if (CHECK_FAIL(cli_fd == -1))
 		goto done;
 
+	srv_fd = accept(listen_fd, NULL, NULL);
+	if (CHECK_FAIL(srv_fd == -1))
+		goto done;
+
 	if (CHECK(skel->bss->listen_tp_sport != srv_port ||
 		  skel->bss->req_sk_sport != srv_port,
 		  "Unexpected sk src port",
@@ -134,11 +138,13 @@ static void test_conn(void)
 		close(listen_fd);
 	if (cli_fd != -1)
 		close(cli_fd);
+	if (srv_fd != -1)
+		close(srv_fd);
 }
 
 static void test_syncookie(void)
 {
-	int listen_fd = -1, cli_fd = -1, err;
+	int listen_fd = -1, cli_fd = -1, srv_fd = -1, err;
 	socklen_t addrlen = sizeof(srv_sa6);
 	int srv_port;
 
@@ -161,6 +167,10 @@ static void test_syncookie(void)
 	if (CHECK_FAIL(cli_fd == -1))
 		goto done;
 
+	srv_fd = accept(listen_fd, NULL, NULL);
+	if (CHECK_FAIL(srv_fd == -1))
+		goto done;
+
 	if (CHECK(skel->bss->listen_tp_sport != srv_port,
 		  "Unexpected tp src port",
 		  "listen_tp_sport:%u expected:%u\n",
@@ -188,6 +198,8 @@ static void test_syncookie(void)
 		close(listen_fd);
 	if (cli_fd != -1)
 		close(cli_fd);
+	if (srv_fd != -1)
+		close(srv_fd);
 }
 
 struct test {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux