[Bug libc/18433] New: posix_spawn does not return correctly upon failure to execute
nachms+sourceware at gmail dot com
sourceware-bugzilla@sourceware.org
Tue May 19 20:34:00 GMT 2015
https://sourceware.org/bugzilla/show_bug.cgi?id=18433
Bug ID: 18433
Summary: posix_spawn does not return correctly upon failure to
execute
Product: glibc
Version: 2.19
Status: NEW
Severity: normal
Priority: P2
Component: libc
Assignee: unassigned at sourceware dot org
Reporter: nachms+sourceware at gmail dot com
CC: drepper.fsp at gmail dot com
Target Milestone: ---
posix_spawn is supposed to return a value indicating an error when it fails.
The specification for it is here:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html
>From the spec: Otherwise, no child process shall be created, the value stored
into the variable pointed to by a non-NULL pid is unspecified, and *an error
number shall be returned as the function return value* to indicate the error.
However, glibc is returning 0 (success) instead of some kind of indication of
error (such as 2 for ENOENT).
Test program:
-------------------------
#include <stdio.h>
#include <spawn.h>
int main()
{
extern char **environ;
char *argv[] = { "/bin/blah_blah-blah", 0 };
pid_t pid = -1;
int ret = posix_spawn(&pid, argv[0], 0, 0, argv, environ);
printf("ret: %d\npid: %ld\n", ret, (long)pid);
return(0);
}
-------------------------
"/bin/blah_blah-blah" doesn't exist, so it should not successfully spawn.
GLIBC for this program is returning:
ret: 0
pid: 17302
FreeBSD, DragonFlyBSD, NetBSD, and musl-libc all handle this correctly.
With them:
ret: 2
pid: -1 (some will put a different value here, which is allowed by the
standard)
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the Glibc-bugs
mailing list