Skip to content

Commit 2343cbe

Browse files
committed
selftests/coredump: add debug logging to coredump socket tests
So it's easier to figure out bugs. Link: https://patch.msgid.link/20251028-work-coredump-signal-v1-18-ca449b7b7aa0@kernel.org Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent d5694db commit 2343cbe

1 file changed

Lines changed: 71 additions & 22 deletions

File tree

tools/testing/selftests/coredump/coredump_socket_test.c

Lines changed: 71 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -98,52 +98,74 @@ TEST_F(coredump, socket)
9898
close(ipc_sockets[0]);
9999

100100
fd_server = create_and_listen_unix_socket("/tmp/coredump.socket");
101-
if (fd_server < 0)
101+
if (fd_server < 0) {
102+
fprintf(stderr, "socket test: create_and_listen_unix_socket failed: %m\n");
102103
goto out;
104+
}
103105

104-
if (write_nointr(ipc_sockets[1], "1", 1) < 0)
106+
if (write_nointr(ipc_sockets[1], "1", 1) < 0) {
107+
fprintf(stderr, "socket test: write_nointr to ipc socket failed: %m\n");
105108
goto out;
109+
}
106110

107111
close(ipc_sockets[1]);
108112

109113
fd_coredump = accept4(fd_server, NULL, NULL, SOCK_CLOEXEC);
110-
if (fd_coredump < 0)
114+
if (fd_coredump < 0) {
115+
fprintf(stderr, "socket test: accept4 failed: %m\n");
111116
goto out;
117+
}
112118

113119
fd_peer_pidfd = get_peer_pidfd(fd_coredump);
114-
if (fd_peer_pidfd < 0)
120+
if (fd_peer_pidfd < 0) {
121+
fprintf(stderr, "socket test: get_peer_pidfd failed\n");
115122
goto out;
123+
}
116124

117-
if (!get_pidfd_info(fd_peer_pidfd, &info))
125+
if (!get_pidfd_info(fd_peer_pidfd, &info)) {
126+
fprintf(stderr, "socket test: get_pidfd_info failed\n");
118127
goto out;
128+
}
119129

120-
if (!(info.mask & PIDFD_INFO_COREDUMP))
130+
if (!(info.mask & PIDFD_INFO_COREDUMP)) {
131+
fprintf(stderr, "socket test: PIDFD_INFO_COREDUMP not set in mask\n");
121132
goto out;
133+
}
122134

123-
if (!(info.coredump_mask & PIDFD_COREDUMPED))
135+
if (!(info.coredump_mask & PIDFD_COREDUMPED)) {
136+
fprintf(stderr, "socket test: PIDFD_COREDUMPED not set in coredump_mask\n");
124137
goto out;
138+
}
125139

126140
fd_core_file = creat("/tmp/coredump.file", 0644);
127-
if (fd_core_file < 0)
141+
if (fd_core_file < 0) {
142+
fprintf(stderr, "socket test: creat coredump file failed: %m\n");
128143
goto out;
144+
}
129145

130146
for (;;) {
131147
char buffer[4096];
132148
ssize_t bytes_read, bytes_write;
133149

134150
bytes_read = read(fd_coredump, buffer, sizeof(buffer));
135-
if (bytes_read < 0)
151+
if (bytes_read < 0) {
152+
fprintf(stderr, "socket test: read from coredump socket failed: %m\n");
136153
goto out;
154+
}
137155

138156
if (bytes_read == 0)
139157
break;
140158

141159
bytes_write = write(fd_core_file, buffer, bytes_read);
142-
if (bytes_read != bytes_write)
160+
if (bytes_read != bytes_write) {
161+
fprintf(stderr, "socket test: write to core file failed (read=%zd, write=%zd): %m\n",
162+
bytes_read, bytes_write);
143163
goto out;
164+
}
144165
}
145166

146167
exit_code = EXIT_SUCCESS;
168+
fprintf(stderr, "socket test: completed successfully\n");
147169
out:
148170
if (fd_core_file >= 0)
149171
close(fd_core_file);
@@ -208,32 +230,47 @@ TEST_F(coredump, socket_detect_userspace_client)
208230
close(ipc_sockets[0]);
209231

210232
fd_server = create_and_listen_unix_socket("/tmp/coredump.socket");
211-
if (fd_server < 0)
233+
if (fd_server < 0) {
234+
fprintf(stderr, "socket_detect_userspace_client: create_and_listen_unix_socket failed: %m\n");
212235
goto out;
236+
}
213237

214-
if (write_nointr(ipc_sockets[1], "1", 1) < 0)
238+
if (write_nointr(ipc_sockets[1], "1", 1) < 0) {
239+
fprintf(stderr, "socket_detect_userspace_client: write_nointr to ipc socket failed: %m\n");
215240
goto out;
241+
}
216242

217243
close(ipc_sockets[1]);
218244

219245
fd_coredump = accept4(fd_server, NULL, NULL, SOCK_CLOEXEC);
220-
if (fd_coredump < 0)
246+
if (fd_coredump < 0) {
247+
fprintf(stderr, "socket_detect_userspace_client: accept4 failed: %m\n");
221248
goto out;
249+
}
222250

223251
fd_peer_pidfd = get_peer_pidfd(fd_coredump);
224-
if (fd_peer_pidfd < 0)
252+
if (fd_peer_pidfd < 0) {
253+
fprintf(stderr, "socket_detect_userspace_client: get_peer_pidfd failed\n");
225254
goto out;
255+
}
226256

227-
if (!get_pidfd_info(fd_peer_pidfd, &info))
257+
if (!get_pidfd_info(fd_peer_pidfd, &info)) {
258+
fprintf(stderr, "socket_detect_userspace_client: get_pidfd_info failed\n");
228259
goto out;
260+
}
229261

230-
if (!(info.mask & PIDFD_INFO_COREDUMP))
262+
if (!(info.mask & PIDFD_INFO_COREDUMP)) {
263+
fprintf(stderr, "socket_detect_userspace_client: PIDFD_INFO_COREDUMP not set in mask\n");
231264
goto out;
265+
}
232266

233-
if (info.coredump_mask & PIDFD_COREDUMPED)
267+
if (info.coredump_mask & PIDFD_COREDUMPED) {
268+
fprintf(stderr, "socket_detect_userspace_client: PIDFD_COREDUMPED incorrectly set (should be userspace client)\n");
234269
goto out;
270+
}
235271

236272
exit_code = EXIT_SUCCESS;
273+
fprintf(stderr, "socket_detect_userspace_client: completed successfully\n");
237274
out:
238275
if (fd_peer_pidfd >= 0)
239276
close(fd_peer_pidfd);
@@ -263,15 +300,20 @@ TEST_F(coredump, socket_detect_userspace_client)
263300
sizeof("/tmp/coredump.socket");
264301

265302
fd_socket = socket(AF_UNIX, SOCK_STREAM, 0);
266-
if (fd_socket < 0)
303+
if (fd_socket < 0) {
304+
fprintf(stderr, "socket_detect_userspace_client (client): socket failed: %m\n");
267305
_exit(EXIT_FAILURE);
306+
}
268307

269308
ret = connect(fd_socket, (const struct sockaddr *)&coredump_sk, coredump_sk_len);
270-
if (ret < 0)
309+
if (ret < 0) {
310+
fprintf(stderr, "socket_detect_userspace_client (client): connect failed: %m\n");
271311
_exit(EXIT_FAILURE);
312+
}
272313

273314
close(fd_socket);
274315
pause();
316+
fprintf(stderr, "socket_detect_userspace_client (client): completed successfully\n");
275317
_exit(EXIT_SUCCESS);
276318
}
277319

@@ -342,17 +384,24 @@ TEST_F(coredump, socket_no_listener)
342384
close(ipc_sockets[0]);
343385

344386
fd_server = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
345-
if (fd_server < 0)
387+
if (fd_server < 0) {
388+
fprintf(stderr, "socket_no_listener: socket failed: %m\n");
346389
goto out;
390+
}
347391

348392
ret = bind(fd_server, (const struct sockaddr *)&coredump_sk, coredump_sk_len);
349-
if (ret < 0)
393+
if (ret < 0) {
394+
fprintf(stderr, "socket_no_listener: bind failed: %m\n");
350395
goto out;
396+
}
351397

352-
if (write_nointr(ipc_sockets[1], "1", 1) < 0)
398+
if (write_nointr(ipc_sockets[1], "1", 1) < 0) {
399+
fprintf(stderr, "socket_no_listener: write_nointr to ipc socket failed: %m\n");
353400
goto out;
401+
}
354402

355403
exit_code = EXIT_SUCCESS;
404+
fprintf(stderr, "socket_no_listener: completed successfully\n");
356405
out:
357406
if (fd_server >= 0)
358407
close(fd_server);

0 commit comments

Comments
 (0)