]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/landlock: Add missing connect(minimal AF_UNSPEC) test
authorMatthieu Buffet <matthieu@buffet.re>
Mon, 27 Oct 2025 19:07:25 +0000 (20:07 +0100)
committerMickaël Salaün <mic@digikod.net>
Fri, 26 Dec 2025 19:38:57 +0000 (20:38 +0100)
connect_variant(unspec_any0) is called twice. Both calls end
up in connect_variant_addrlen() with an address length of
get_addrlen(minimal=false).
However, the connect() syscall and its variants (e.g.
iouring/compat) accept much shorter addresses of 4 bytes
and that behaviour was not tested.

Replace one of these calls with one using a minimal address
length (just a bare sa_family=AF_UNSPEC field with no actual
address). Also add a call using a truncated address for good
measure.

Signed-off-by: Matthieu Buffet <matthieu@buffet.re>
Link: https://lore.kernel.org/r/20251027190726.626244-3-matthieu@buffet.re
Signed-off-by: Mickaël Salaün <mic@digikod.net>
tools/testing/selftests/landlock/net_test.c

index 3bbc0508420b1c02b06a83d9da023b72622c1bdc..b34b139b3f89c5f4d9827ddeafca301952dbe85c 100644 (file)
@@ -906,7 +906,19 @@ TEST_F(protocol, connect_unspec)
                        EXPECT_EQ(0, close(ruleset_fd));
                }
 
-               ret = connect_variant(connect_fd, &self->unspec_any0);
+               /* Try to re-disconnect with a truncated address struct. */
+               EXPECT_EQ(-EINVAL,
+                         connect_variant_addrlen(
+                                 connect_fd, &self->unspec_any0,
+                                 get_addrlen(&self->unspec_any0, true) - 1));
+
+               /*
+                * Re-disconnect, with a minimal sockaddr struct (just a
+                * bare af_family=AF_UNSPEC field).
+                */
+               ret = connect_variant_addrlen(connect_fd, &self->unspec_any0,
+                                             get_addrlen(&self->unspec_any0,
+                                                         true));
                if (self->srv0.protocol.domain == AF_UNIX &&
                    self->srv0.protocol.type == SOCK_STREAM) {
                        EXPECT_EQ(-EINVAL, ret);