Re: [PATCH] fork: report pid exhaustion correctly

From: KJ Tsanaktsidis
Date: Mon Sep 03 2018 - 19:31:38 EST


Thanks :) yeah, first kernel patch. I got pretty annoyed by how long I
spent trying to figure
out why my database was reporting disk space errors on pthread_create,
and when I
finally worked out what was going on sending a patch to fix it was
somewhat therapeutic!

On Tue, Sep 4, 2018 at 9:22 AM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> On Mon, 3 Sep 2018 04:10:16 -0700 ktsanaktsidis@xxxxxxxxxxx wrote:
>
> > From: KJ Tsanaktsidis <ktsanaktsidis@xxxxxxxxxxx>
> >
> > Make the clone and fork syscalls return EAGAIN when the limit on the
> > number of pids /proc/sys/kernel/pid_max is exceeded.
> >
> > Currently, when the pid_max limit is exceeded, the kernel will return
> > ENOSPC from the fork and clone syscalls. This is contrary to the
> > documented behaviour, which explicitly calls out the pid_max case as one
> > where EAGAIN should be returned. It also leads to really confusing error
> > messages in userspace programs which will complain about a lack of disk
> > space when they fail to create processes/threads for this reason.
> >
> > This error is being returned because the alloc_pid function uses the idr
> > api to find a new pid; when there are none available, idr_alloc_cyclic
> > is returns -ENOSPC, and this is being propagated back into userspace.
> >
> > This behaviour has been broken before, and was explicitly fixed in
> > commit 35f71bc0a09a ("fork: report pid reservation failure properly"),
> > so I think -EAGAIN is definitely the right thing to return in this case.
> > The current behaviour change dates from commit 95846ecf9dac ("pid:
> > replace pid bitmap implementation with IDR AIP") and was I believe
> > unintentional.
> >
> > This patch has no impact on the case where allocating a pid fails
> > because the child reaper for the namespace is dead; that case will still
> > return -ENOMEM.
>
> Thanks. First ever kernel patch? It was a damn good one!
>
> > Fixes: 95846ecf9dac ("pid: replace pid bitmap implementation with IDR AIP")
> > Signed-off-by: KJ Tsanaktsidis <ktsanaktsidis@xxxxxxxxxxx>
>
> I'll add cc:stable here so the fix gets backported into earlier kernels
>