pid: make ENOMEM return value more obvious
The alloc_pid() codepath used to be simpler. With the introducation of the ability to choose specific pids in49cb2fc42c
("fork: extend clone3() to support setting a PID") it got more complex. It hasn't been super obvious that ENOMEM is returned when the pid namespace init process/child subreaper of the pid namespace has died. As can be seen from multiple attempts to improve this see e.g. [1] and most recently [2]. We regressed returning ENOMEM in [3] and [2] restored it. Let's add a comment on top explaining that this is historic and documented behavior and cannot easily be changed. [1]:35f71bc0a0
("fork: report pid reservation failure properly") [2]:b26ebfe12f
("pid: Fix error return value in some cases") [3]:49cb2fc42c
("fork: extend clone3() to support setting a PID") Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
b26ebfe12f
commit
10dab84caf
|
@ -247,6 +247,14 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid,
|
|||
tmp = tmp->parent;
|
||||
}
|
||||
|
||||
/*
|
||||
* ENOMEM is not the most obvious choice especially for the case
|
||||
* where the child subreaper has already exited and the pid
|
||||
* namespace denies the creation of any new processes. But ENOMEM
|
||||
* is what we have exposed to userspace for a long time and it is
|
||||
* documented behavior for pid namespaces. So we can't easily
|
||||
* change it even if there were an error code better suited.
|
||||
*/
|
||||
retval = -ENOMEM;
|
||||
|
||||
if (unlikely(is_child_reaper(pid))) {
|
||||
|
|
Loading…
Reference in New Issue