From 8440c5e621668d15ab3157f0d6f4a8d1d8507ed1 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Wed, 22 Mar 2017 18:31:44 +0000 Subject: [PATCH] Avoid accessing an uninitialized variable when vfork() fails. Reported by: Miles Ohlrich MFC after: 1 week Sponsored by: Dell EMC Isilon --- lib/libproc/proc_create.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/libproc/proc_create.c b/lib/libproc/proc_create.c index 69de8cb119bd..10a53cd90eb5 100644 --- a/lib/libproc/proc_create.c +++ b/lib/libproc/proc_create.c @@ -178,8 +178,7 @@ proc_create(const char *file, char * const *argv, proc_child_func *pcf, void *child_arg, struct proc_handle **pphdl) { struct proc_handle *phdl; - int error = 0; - int status; + int error, status; pid_t pid; if (elf_version(EV_CURRENT) == EV_NONE) @@ -217,16 +216,17 @@ proc_create(const char *file, char * const *argv, proc_child_func *pcf, /* Check for an unexpected status. */ if (!WIFSTOPPED(status)) { - error = errno; + error = EBUSY; DPRINTFX("ERROR: child process %d status 0x%x", pid, status); goto bad; - } else - phdl->status = PS_STOP; - } + } + phdl->status = PS_STOP; + bad: - if (error && phdl != NULL) { - proc_free(phdl); - phdl = NULL; + if (error != 0 && phdl != NULL) { + proc_free(phdl); + phdl = NULL; + } } *pphdl = phdl; return (error);