Am Di., 28. Okt. 2025 um 09:46 Uhr schrieb Christian Brauner
<brauner@kernel.org>:
>
> When PIDFD_INFO_COREDUMP is requested we raise it unconditionally in the
> returned mask even if no coredump actually did take place. This was
> done because we assumed that the later check whether ->coredump_mask as
> non-zero detects that it is zero and then retrieves the dumpability
> settings from the task's mm. This has issues though becuase there are
> tasks that might not have any mm. Also it's just not very cleanly
> implemented. Fix this.
>
> Signed-off-by: Christian Brauner <brauner@kernel.org>
Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
> ---
> fs/pidfs.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/pidfs.c b/fs/pidfs.c
> index c2f0b7091cd7..c0f410903c3f 100644
> --- a/fs/pidfs.c
> +++ b/fs/pidfs.c
> @@ -335,8 +335,9 @@ static long pidfd_info(struct file *file, unsigned int cmd, unsigned long arg)
> }
>
> if (mask & PIDFD_INFO_COREDUMP) {
> - kinfo.mask |= PIDFD_INFO_COREDUMP;
> kinfo.coredump_mask = READ_ONCE(attr->__pei.coredump_mask);
> + if (kinfo.coredump_mask)
> + kinfo.mask |= PIDFD_INFO_COREDUMP;
> }
>
> task = get_pid_task(pid, PIDTYPE_PID);
> @@ -355,12 +356,13 @@ static long pidfd_info(struct file *file, unsigned int cmd, unsigned long arg)
> if (!c)
> return -ESRCH;
>
> - if ((kinfo.mask & PIDFD_INFO_COREDUMP) && !(kinfo.coredump_mask)) {
> + if ((mask & PIDFD_INFO_COREDUMP) && !kinfo.coredump_mask) {
> guard(task_lock)(task);
> if (task->mm) {
> unsigned long flags = __mm_flags_get_dumpable(task->mm);
>
> kinfo.coredump_mask = pidfs_coredump_mask(flags);
> + kinfo.mask |= PIDFD_INFO_COREDUMP;
> }
> }
>
>
> --
> 2.47.3
>