Re: [PATCH 1/2] coredump: fix race condition between connect and putting pidfs dentry
From: Christian Brauner
Date: Fri Jul 04 2025 - 04:59:29 EST
On Thu, Jul 03, 2025 at 02:02:43PM +0200, Laura Brehm wrote:
> In Commit 1d8db6fd698de1f73b1a7d72aea578fdd18d9a87 ("pidfs, coredump:
> add PIDFD_INFO_COREDUMP"), the coredump handling logic puts the pidfs
> entry right after `connect`, and states:
>
> Make sure to only put our reference after connect() took
> its own reference keeping the pidfs entry alive ...
>
> However, `connect` does not seem to take a reference to the pidfs
> entry, just the pid struct (please correct me if I'm wrong here).
kernel_connect()
-> sock->ops->connect::unix_stream_connect()
-> prepare_peercred()
-> pidfs_register_pid()
> Since the expectation is that the coredump server makes a
> PIDFD_GET_INFO ioctl to get the coredump info - see Commit
> a3b4ca60f93ff3e8b41fffbf63bb02ef3b169c5e ("coredump: add coredump
> socket"):
>
> The pidfd for the crashing task will contain information how the
> task coredumps. The PIDFD_GET_INFO ioctl gained a new flag
> PIDFD_INFO_COREDUMP which can be used to retreive the coredump
> information.
>
> If the coredump gets a new coredump client connection the kernel
> guarantees that PIDFD_INFO_COREDUMP information is available.
>
> This seems to result in the coredump server racing with the kernel to
> get the pidfd before the kernel puts the pidfs entry, and if it loses
> it won't be able to retrieve the coredump information.
Honestly curious: is that something you actually observed or that you
think may happen or that an some coding assistant thinks might happen?