Messages in this thread | | | From | (Eric W. Biederman) | Date | Tue, 12 Feb 2013 02:34:15 -0800 | Subject | Re: Odd ENOMEM being returned in 3.8-rcX |
| |
Andrew Morton <akpm@linux-foundation.org> writes:
> On Fri, 08 Feb 2013 12:13:09 -0800 > ebiederm@xmission.com (Eric W. Biederman) wrote: > >> If mock has called unshare(CLONE_NEWPID). And then forked a process and >> that process exited, and then forked anothe process that second and all >> subsequent fork calls will fail with -ENOMEM (because init has exited in >> the pid namespace). -ENOMEM will be generated because of a failure of >> alloc_pid. > > Can we please fix this? The system is *not* out of memory and it's > wildly misleading to report this to userspace. > > If alloc_pid() can fail for multiple reasons then it should be > returning an ERR_PTR on failure, not NULL.
We might be able to fix this.
alloc_pid causing fork to fail with ENOMEM when there are simply not enough pids available to use is a long standing failure mode, and error code.
I believe to change this responsibily you would have read a lot of programs to see if fork failing with an additional error code would be handled or if things would break in subtle ways. There would need to be research to see what posix says about this, and the posix view on fork would have any impact on this in any way.
Furthermore this error is a resource shortage, so ENOMEM isn't even exactly wrong.
I can understand the problem but I totally don't care enough to push an ABI change like that through.
Eric
| |