diff options
| author | Matthieu Buffet <matthieu@buffet.re> | 2025-10-27 22:07:25 +0300 |
|---|---|---|
| committer | Mickaël Salaün <mic@digikod.net> | 2025-12-26 22:38:57 +0300 |
| commit | 6685201ebfacff0c889bcd569181fa6e8af5575e (patch) | |
| tree | e31777c0fce28a57f133f7dd42f5b9a24cf82586 | |
| parent | bd09d9a05cf04028f639e209b416bacaeffd4909 (diff) | |
| download | linux-6685201ebfacff0c889bcd569181fa6e8af5575e.tar.xz | |
selftests/landlock: Add missing connect(minimal AF_UNSPEC) test
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>
| -rw-r--r-- | tools/testing/selftests/landlock/net_test.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tools/testing/selftests/landlock/net_test.c b/tools/testing/selftests/landlock/net_test.c index 3bbc0508420b..b34b139b3f89 100644 --- a/tools/testing/selftests/landlock/net_test.c +++ b/tools/testing/selftests/landlock/net_test.c @@ -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); |
