From: Dustin Lundquist Date: Mon, 28 Oct 2019 16:52:06 +0000 (+0000) Subject: system: sysupgrade: close input side of pipe before reading X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3aa051b44177fc1403acab295f9f833451c4b9f0;p=oweals%2Fprocd.git system: sysupgrade: close input side of pipe before reading When /usr/libexec/validate_firmware_image is not present on the system procd will hang indefinitely on the read() since the input side of the pipe is still open. Also fix pipe file descriptor leak when fork() fails. Signed-off-by: Dustin Lundquist Acked-by: Rafał Miłecki --- diff --git a/system.c b/system.c index 9879bca..65d3f09 100644 --- a/system.c +++ b/system.c @@ -434,6 +434,8 @@ static int validate_firmware_image_call(const char *file) switch (fork()) { case -1: + close(fds[0]); + close(fds[1]); return -errno; case 0: /* Set stdin & stderr to /dev/null */ @@ -454,11 +456,11 @@ static int validate_firmware_image_call(const char *file) } /* Parent process */ + close(fds[1]); tok = json_tokener_new(); if (!tok) { close(fds[0]); - close(fds[1]); return -ENOMEM; } @@ -476,7 +478,6 @@ static int validate_firmware_image_call(const char *file) } close(fds[0]); - close(fds[1]); err = -ENOENT; if (jsobj) {