Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+71 -22
+71 -22
tools/testing/selftests/coredump/coredump_socket_test.c
··· 98 98 close(ipc_sockets[0]); 99 99 100 100 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"); 102 103 goto out; 104 + } 103 105 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"); 105 108 goto out; 109 + } 106 110 107 111 close(ipc_sockets[1]); 108 112 109 113 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"); 111 116 goto out; 117 + } 112 118 113 119 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"); 115 122 goto out; 123 + } 116 124 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"); 118 127 goto out; 128 + } 119 129 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"); 121 132 goto out; 133 + } 122 134 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"); 124 137 goto out; 138 + } 125 139 126 140 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"); 128 143 goto out; 144 + } 129 145 130 146 for (;;) { 131 147 char buffer[4096]; 132 148 ssize_t bytes_read, bytes_write; 133 149 134 150 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"); 136 153 goto out; 154 + } 137 155 138 156 if (bytes_read == 0) 139 157 break; 140 158 141 159 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); 143 163 goto out; 164 + } 144 165 } 145 166 146 167 exit_code = EXIT_SUCCESS; 168 + fprintf(stderr, "socket test: completed successfully\n"); 147 169 out: 148 170 if (fd_core_file >= 0) 149 171 close(fd_core_file); ··· 230 208 close(ipc_sockets[0]); 231 209 232 210 fd_server = create_and_listen_unix_socket("/tmp/coredump.socket"); 233 - if (fd_server < 0) 211 + if (fd_server < 0) { 212 + fprintf(stderr, "socket_detect_userspace_client: create_and_listen_unix_socket failed: %m\n"); 234 213 goto out; 214 + } 235 215 236 - if (write_nointr(ipc_sockets[1], "1", 1) < 0) 216 + if (write_nointr(ipc_sockets[1], "1", 1) < 0) { 217 + fprintf(stderr, "socket_detect_userspace_client: write_nointr to ipc socket failed: %m\n"); 237 218 goto out; 219 + } 238 220 239 221 close(ipc_sockets[1]); 240 222 241 223 fd_coredump = accept4(fd_server, NULL, NULL, SOCK_CLOEXEC); 242 - if (fd_coredump < 0) 224 + if (fd_coredump < 0) { 225 + fprintf(stderr, "socket_detect_userspace_client: accept4 failed: %m\n"); 243 226 goto out; 227 + } 244 228 245 229 fd_peer_pidfd = get_peer_pidfd(fd_coredump); 246 - if (fd_peer_pidfd < 0) 230 + if (fd_peer_pidfd < 0) { 231 + fprintf(stderr, "socket_detect_userspace_client: get_peer_pidfd failed\n"); 247 232 goto out; 233 + } 248 234 249 - if (!get_pidfd_info(fd_peer_pidfd, &info)) 235 + if (!get_pidfd_info(fd_peer_pidfd, &info)) { 236 + fprintf(stderr, "socket_detect_userspace_client: get_pidfd_info failed\n"); 250 237 goto out; 238 + } 251 239 252 - if (!(info.mask & PIDFD_INFO_COREDUMP)) 240 + if (!(info.mask & PIDFD_INFO_COREDUMP)) { 241 + fprintf(stderr, "socket_detect_userspace_client: PIDFD_INFO_COREDUMP not set in mask\n"); 253 242 goto out; 243 + } 254 244 255 - if (info.coredump_mask & PIDFD_COREDUMPED) 245 + if (info.coredump_mask & PIDFD_COREDUMPED) { 246 + fprintf(stderr, "socket_detect_userspace_client: PIDFD_COREDUMPED incorrectly set (should be userspace client)\n"); 256 247 goto out; 248 + } 257 249 258 250 exit_code = EXIT_SUCCESS; 251 + fprintf(stderr, "socket_detect_userspace_client: completed successfully\n"); 259 252 out: 260 253 if (fd_peer_pidfd >= 0) 261 254 close(fd_peer_pidfd); ··· 300 263 sizeof("/tmp/coredump.socket"); 301 264 302 265 fd_socket = socket(AF_UNIX, SOCK_STREAM, 0); 303 - if (fd_socket < 0) 266 + if (fd_socket < 0) { 267 + fprintf(stderr, "socket_detect_userspace_client (client): socket failed: %m\n"); 304 268 _exit(EXIT_FAILURE); 269 + } 305 270 306 271 ret = connect(fd_socket, (const struct sockaddr *)&coredump_sk, coredump_sk_len); 307 - if (ret < 0) 272 + if (ret < 0) { 273 + fprintf(stderr, "socket_detect_userspace_client (client): connect failed: %m\n"); 308 274 _exit(EXIT_FAILURE); 275 + } 309 276 310 277 close(fd_socket); 311 278 pause(); 279 + fprintf(stderr, "socket_detect_userspace_client (client): completed successfully\n"); 312 280 _exit(EXIT_SUCCESS); 313 281 } 314 282 ··· 384 342 close(ipc_sockets[0]); 385 343 386 344 fd_server = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); 387 - if (fd_server < 0) 345 + if (fd_server < 0) { 346 + fprintf(stderr, "socket_no_listener: socket failed: %m\n"); 388 347 goto out; 348 + } 389 349 390 350 ret = bind(fd_server, (const struct sockaddr *)&coredump_sk, coredump_sk_len); 391 - if (ret < 0) 351 + if (ret < 0) { 352 + fprintf(stderr, "socket_no_listener: bind failed: %m\n"); 392 353 goto out; 354 + } 393 355 394 - if (write_nointr(ipc_sockets[1], "1", 1) < 0) 356 + if (write_nointr(ipc_sockets[1], "1", 1) < 0) { 357 + fprintf(stderr, "socket_no_listener: write_nointr to ipc socket failed: %m\n"); 395 358 goto out; 359 + } 396 360 397 361 exit_code = EXIT_SUCCESS; 362 + fprintf(stderr, "socket_no_listener: completed successfully\n"); 398 363 out: 399 364 if (fd_server >= 0) 400 365 close(fd_server);