From dd4f128ac5fa26e3d8c4d003c770e69f9ed9a91e Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Mon, 15 Jul 2019 10:38:59 +0900 Subject: Handle failure of opening a null device This issue is detected by Coverity Scan. --- mjit_worker.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'mjit_worker.c') diff --git a/mjit_worker.c b/mjit_worker.c index 27af15b2a8..aeb9446e44 100644 --- a/mjit_worker.c +++ b/mjit_worker.c @@ -548,6 +548,13 @@ COMPILER_WARNING_IGNORED(-Wdeprecated-declarations) static pid_t start_process(const char *abspath, char *const *argv) { + // Not calling non-async-signal-safe functions between vfork + // and execv for safety + int dev_null = rb_cloexec_open(ruby_null_device, O_WRONLY, 0); + if (dev_null < 0) { + verbose(1, "MJIT: Failed to open a null device: %s", strerror(errno)); + return -1; + } if (mjit_opts.verbose >= 2) { const char *arg; fprintf(stderr, "Starting process: %s", abspath); @@ -556,9 +563,6 @@ start_process(const char *abspath, char *const *argv) fprintf(stderr, "\n"); } - // Not calling non-async-signal-safe functions between vfork - // and execv for safety - int dev_null = rb_cloexec_open(ruby_null_device, O_WRONLY, 0); pid_t pid; #ifdef _WIN32 extern HANDLE rb_w32_start_process(const char *abspath, char *const *argv, int out_fd); -- cgit v1.2.3