> On Oct 27, 2019, at 6:44 AM, Rafał Miłecki <zaj...@gmail.com> wrote: > > You also need to drop close(fds[1]); that is placed inside the "if > (!tok)" block.
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 <d.lundqu...@temperednetworks.com> --- system.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/system.c b/system.c index 751a016..98d9f8c 100644 --- a/system.c +++ b/system.c @@ -405,6 +405,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 */ @@ -425,11 +427,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; } @@ -447,7 +449,6 @@ static int validate_firmware_image_call(const char *file) } close(fds[0]); - close(fds[1]); err = -ENOENT; if (jsobj) { -- 2.20.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel