[PATCH v2 4/6] selftests/landlock: Support pathname socket path in set_unix_address
Tingmao Wang
m at maowtm.org
Tue Dec 30 17:20:22 UTC 2025
To prepare for extending the socket tests to do non-abstract sockets too,
extend set_unix_address() to also be able to populate a non-abstract
socket path under TMP_DIR. Also use snprintf for good measure.
This also changes existing callers to pass true for the abstract argument.
Signed-off-by: Tingmao Wang <m at maowtm.org>
---
tools/testing/selftests/landlock/common.h | 33 +++++++++++++++----
tools/testing/selftests/landlock/net_test.c | 2 +-
.../landlock/scoped_abstract_unix_test.c | 30 ++++++++---------
.../selftests/landlock/scoped_signal_test.c | 2 +-
4 files changed, 44 insertions(+), 23 deletions(-)
diff --git a/tools/testing/selftests/landlock/common.h b/tools/testing/selftests/landlock/common.h
index 90551650299c..c55c11434e27 100644
--- a/tools/testing/selftests/landlock/common.h
+++ b/tools/testing/selftests/landlock/common.h
@@ -241,13 +241,34 @@ struct service_fixture {
};
};
+#define PATHNAME_UNIX_SOCK_DIR TMP_DIR
+
+/**
+ * set_unix_address - Set up srv->unix_addr and srv->unix_addr_len.
+ * @srv: Service fixture containing the socket address to initialize
+ * @index: Index to include in socket names
+ * @abstract: If true, creates an abstract socket address (sun_path[0] ==
+ * '\0') with the given name. If false, creates a pathname socket
+ * address with the given path.
+ */
static void __maybe_unused set_unix_address(struct service_fixture *const srv,
- const unsigned short index)
+ const unsigned short index,
+ const bool abstract)
{
srv->unix_addr.sun_family = AF_UNIX;
- sprintf(srv->unix_addr.sun_path,
- "_selftests-landlock-abstract-unix-tid%d-index%d", sys_gettid(),
- index);
- srv->unix_addr_len = SUN_LEN(&srv->unix_addr);
- srv->unix_addr.sun_path[0] = '\0';
+ if (abstract) {
+ snprintf(srv->unix_addr.sun_path,
+ sizeof(srv->unix_addr.sun_path),
+ "_selftests-landlock-abstract-unix-tid%d-index%d",
+ sys_gettid(), index);
+ srv->unix_addr_len = SUN_LEN(&srv->unix_addr);
+ srv->unix_addr.sun_path[0] = '\0';
+ } else {
+ snprintf(srv->unix_addr.sun_path,
+ sizeof(srv->unix_addr.sun_path),
+ PATHNAME_UNIX_SOCK_DIR
+ "/pathname-unix-tid%d-index%d.sock",
+ sys_gettid(), index);
+ srv->unix_addr_len = sizeof(srv->unix_addr);
+ }
}
diff --git a/tools/testing/selftests/landlock/net_test.c b/tools/testing/selftests/landlock/net_test.c
index b34b139b3f89..fd3fe51ce92f 100644
--- a/tools/testing/selftests/landlock/net_test.c
+++ b/tools/testing/selftests/landlock/net_test.c
@@ -69,7 +69,7 @@ static int set_service(struct service_fixture *const srv,
return 0;
case AF_UNIX:
- set_unix_address(srv, index);
+ set_unix_address(srv, index, true);
return 0;
}
return 1;
diff --git a/tools/testing/selftests/landlock/scoped_abstract_unix_test.c b/tools/testing/selftests/landlock/scoped_abstract_unix_test.c
index 72f97648d4a7..4a790e2d387d 100644
--- a/tools/testing/selftests/landlock/scoped_abstract_unix_test.c
+++ b/tools/testing/selftests/landlock/scoped_abstract_unix_test.c
@@ -58,8 +58,8 @@ FIXTURE_SETUP(scoped_domains)
memset(&self->stream_address, 0, sizeof(self->stream_address));
memset(&self->dgram_address, 0, sizeof(self->dgram_address));
- set_unix_address(&self->stream_address, 0);
- set_unix_address(&self->dgram_address, 1);
+ set_unix_address(&self->stream_address, 0, true);
+ set_unix_address(&self->dgram_address, 1, true);
}
FIXTURE_TEARDOWN(scoped_domains)
@@ -280,7 +280,7 @@ FIXTURE_SETUP(scoped_audit)
disable_caps(_metadata);
memset(&self->dgram_address, 0, sizeof(self->dgram_address));
- set_unix_address(&self->dgram_address, 1);
+ set_unix_address(&self->dgram_address, 1, true);
set_cap(_metadata, CAP_AUDIT_CONTROL);
self->audit_fd = audit_init_with_exe_filter(&self->audit_filter);
@@ -392,16 +392,16 @@ FIXTURE_SETUP(scoped_vs_unscoped)
memset(&self->parent_stream_address, 0,
sizeof(self->parent_stream_address));
- set_unix_address(&self->parent_stream_address, 0);
+ set_unix_address(&self->parent_stream_address, 0, true);
memset(&self->parent_dgram_address, 0,
sizeof(self->parent_dgram_address));
- set_unix_address(&self->parent_dgram_address, 1);
+ set_unix_address(&self->parent_dgram_address, 1, true);
memset(&self->child_stream_address, 0,
sizeof(self->child_stream_address));
- set_unix_address(&self->child_stream_address, 2);
+ set_unix_address(&self->child_stream_address, 2, true);
memset(&self->child_dgram_address, 0,
sizeof(self->child_dgram_address));
- set_unix_address(&self->child_dgram_address, 3);
+ set_unix_address(&self->child_dgram_address, 3, true);
}
FIXTURE_TEARDOWN(scoped_vs_unscoped)
@@ -622,9 +622,9 @@ FIXTURE_SETUP(outside_socket)
drop_caps(_metadata);
memset(&self->transit_address, 0, sizeof(self->transit_address));
- set_unix_address(&self->transit_address, 0);
+ set_unix_address(&self->transit_address, 0, true);
memset(&self->address, 0, sizeof(self->address));
- set_unix_address(&self->address, 1);
+ set_unix_address(&self->address, 1, true);
}
FIXTURE_TEARDOWN(outside_socket)
@@ -802,9 +802,9 @@ TEST_F(various_address_sockets, scoped_pathname_sockets)
/* Abstract address. */
memset(&stream_abstract_addr, 0, sizeof(stream_abstract_addr));
- set_unix_address(&stream_abstract_addr, 0);
+ set_unix_address(&stream_abstract_addr, 0, true);
memset(&dgram_abstract_addr, 0, sizeof(dgram_abstract_addr));
- set_unix_address(&dgram_abstract_addr, 1);
+ set_unix_address(&dgram_abstract_addr, 1, true);
/* Unnamed address for datagram socket. */
ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_DGRAM, 0, unnamed_sockets));
@@ -990,9 +990,9 @@ TEST(datagram_sockets)
drop_caps(_metadata);
memset(&connected_addr, 0, sizeof(connected_addr));
- set_unix_address(&connected_addr, 0);
+ set_unix_address(&connected_addr, 0, true);
memset(&non_connected_addr, 0, sizeof(non_connected_addr));
- set_unix_address(&non_connected_addr, 1);
+ set_unix_address(&non_connected_addr, 1, true);
ASSERT_EQ(0, pipe2(pipe_parent, O_CLOEXEC));
ASSERT_EQ(0, pipe2(pipe_child, O_CLOEXEC));
@@ -1090,9 +1090,9 @@ TEST(self_connect)
drop_caps(_metadata);
memset(&connected_addr, 0, sizeof(connected_addr));
- set_unix_address(&connected_addr, 0);
+ set_unix_address(&connected_addr, 0, true);
memset(&non_connected_addr, 0, sizeof(non_connected_addr));
- set_unix_address(&non_connected_addr, 1);
+ set_unix_address(&non_connected_addr, 1, true);
connected_socket = socket(AF_UNIX, SOCK_DGRAM, 0);
non_connected_socket = socket(AF_UNIX, SOCK_DGRAM, 0);
diff --git a/tools/testing/selftests/landlock/scoped_signal_test.c b/tools/testing/selftests/landlock/scoped_signal_test.c
index d8bf33417619..8d1e1dc89c43 100644
--- a/tools/testing/selftests/landlock/scoped_signal_test.c
+++ b/tools/testing/selftests/landlock/scoped_signal_test.c
@@ -463,7 +463,7 @@ TEST_F(fown, sigurg_socket)
pid_t child;
memset(&server_address, 0, sizeof(server_address));
- set_unix_address(&server_address, 0);
+ set_unix_address(&server_address, 0, true);
ASSERT_EQ(0, pipe2(pipe_parent, O_CLOEXEC));
ASSERT_EQ(0, pipe2(pipe_child, O_CLOEXEC));
--
2.52.0
More information about the Linux-security-module-archive
mailing list