selftest: af_unix: Add test case for backtrack after finalising SCC.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Tue, 2 Jul 2024 16:04:28 +0000 (01:04 +0900)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Jul 2024 02:36:22 +0000 (19:36 -0700)
syzkaller reported a KMSAN splat in __unix_walk_scc() while backtracking
edge_stack after finalising SCC.

Let's add a test case exercising the path.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
Link: https://patch.msgid.link/20240702160428.10153-2-syoshida@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/af_unix/scm_rights.c

index 2bfed46e0b19a72c494a762a6bc5e0353d589d2e..d663362565803c5115dea179c8c959d6cbf05b68 100644 (file)
 
 FIXTURE(scm_rights)
 {
-       int fd[16];
+       int fd[32];
 };
 
 FIXTURE_VARIANT(scm_rights)
 {
-       char name[16];
+       char name[32];
        int type;
        int flags;
        bool test_listener;
@@ -172,6 +172,8 @@ static void __create_sockets(struct __test_metadata *_metadata,
                             const FIXTURE_VARIANT(scm_rights) *variant,
                             int n)
 {
+       ASSERT_LE(n * 2, sizeof(self->fd) / sizeof(self->fd[0]));
+
        if (variant->test_listener)
                create_listeners(_metadata, self, n);
        else
@@ -283,4 +285,23 @@ TEST_F(scm_rights, cross_edge)
        close_sockets(8);
 }
 
+TEST_F(scm_rights, backtrack_from_scc)
+{
+       create_sockets(10);
+
+       send_fd(0, 1);
+       send_fd(0, 4);
+       send_fd(1, 2);
+       send_fd(2, 3);
+       send_fd(3, 1);
+
+       send_fd(5, 6);
+       send_fd(5, 9);
+       send_fd(6, 7);
+       send_fd(7, 8);
+       send_fd(8, 6);
+
+       close_sockets(10);
+}
+
 TEST_HARNESS_MAIN