On Mon, May 05, 2025 at 11:48:43AM -0700, Kuniyuki Iwashima wrote: > From: Christian Brauner <brauner@xxxxxxxxxx> > Date: Mon, 05 May 2025 13:13:42 +0200 > > @@ -801,6 +846,40 @@ void do_coredump(const kernel_siginfo_t *siginfo) > > } > > break; > > } > > + case COREDUMP_SOCK: { > > + struct file *file __free(fput) = NULL; > > +#ifdef CONFIG_UNIX > > + struct socket *socket; > > + > > + /* > > + * It is possible that the userspace process which is > > + * supposed to handle the coredump and is listening on > > + * the AF_UNIX socket coredumps. Userspace should just > > + * mark itself non dumpable. > > + */ > > + > > + retval = sock_create_kern(&init_net, AF_UNIX, SOCK_STREAM, 0, &socket); > > + if (retval < 0) > > + goto close_fail; > > + > > + file = sock_alloc_file(socket, 0, NULL); > > + if (IS_ERR(file)) { > > + sock_release(socket); > > + retval = PTR_ERR(file); > > + goto close_fail; > > + } > > + > > + retval = kernel_connect(socket, > > + (struct sockaddr *)(&coredump_unix_socket), > > + COREDUMP_UNIX_SOCKET_ADDR_SIZE, 0); > > This blocks forever if the listener's accept() queue is full. > > I think we don't want that and should pass O_NONBLOCK. > > To keep the queue clean is userspace responsibility, and we don't > need to care about a weird user. That seems fine to me. I've changed that.