Unverified Commit 6685201e authored by Matthieu Buffet's avatar Matthieu Buffet Committed by Mickaël Salaün
Browse files

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: default avatarMatthieu Buffet <matthieu@buffet.re>
Link: https://lore.kernel.org/r/20251027190726.626244-3-matthieu@buffet.re


Signed-off-by: default avatarMickaël Salaün <mic@digikod.net>
parent bd09d9a0
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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);