X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fprocess%2Fposix_spawn.c;h=29652197c58cbff007a3251b89a699e69dbbb2f7;hb=1ef37aa00ea830dfda76e04e3d941cafa74d8b76;hp=2f8ef935c0bd7a7d9bb7779d358546fb9fc24df5;hpb=13d1afa46f8098df290008c681816c9eb89ffbdb;p=musl diff --git a/src/process/posix_spawn.c b/src/process/posix_spawn.c index 2f8ef935..29652197 100644 --- a/src/process/posix_spawn.c +++ b/src/process/posix_spawn.c @@ -8,7 +8,6 @@ #include "syscall.h" #include "pthread_impl.h" #include "fdop.h" -#include "libc.h" struct args { int p[2]; @@ -102,6 +101,10 @@ static int child(void *args_vp) break; case FDOP_DUP2: fd = op->srcfd; + if (fd == p) { + ret = -EBADF; + goto fail; + } if (fd != op->fd) { if ((ret=__sys_dup2(fd, op->fd))<0) goto fail; @@ -122,6 +125,14 @@ static int child(void *args_vp) __syscall(SYS_close, fd); } break; + case FDOP_CHDIR: + ret = __syscall(SYS_chdir, op->path); + if (ret<0) goto fail; + break; + case FDOP_FCHDIR: + ret = __syscall(SYS_fchdir, op->fd); + if (ret<0) goto fail; + break; } } }