From b5437a42f9950d7f56d7c199521929e7d93df287 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 26 Sep 2021 18:11:38 -0400 Subject: [PATCH] Allocate pollfd array rather than using a VLA --- daemon.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/daemon.c b/daemon.c index efeaf22..e4c3145 100644 --- a/daemon.c +++ b/daemon.c @@ -312,6 +312,14 @@ int main(int argc, char *argv[]) { } setTitle(); + struct pollfd *fds = calloc(1 + 2 * services.len, sizeof(*fds)); + if (!fds) { + syslog(LOG_ERR, "calloc: %m"); + goto shutdown; + } + fds[0].fd = fifo; + fds[0].events = POLLIN; + sigset_t mask; sigemptyset(&mask); for (;;) { @@ -331,6 +339,11 @@ int main(int argc, char *argv[]) { } if (signals[SIGHUP]) { parseConfig(configPath); + fds = reallocarray(fds, 1 + 2 * services.len, sizeof(*fds)); + if (!fds) { + syslog(LOG_ERR, "reallocarray: %m"); + goto shutdown; + } setTitle(); signals[SIGHUP] = 0; } @@ -340,10 +353,6 @@ int main(int argc, char *argv[]) { signals[SIGINFO] = 0; } - struct pollfd fds[1 + 2 * services.len]; - fds[0].fd = fifo; - fds[0].events = POLLIN; - struct timespec deadline = {0}; for (size_t i = 0; i < services.len; ++i) { struct Service *service = &services.ptr[i]; @@ -414,6 +423,7 @@ int main(int argc, char *argv[]) { } } +shutdown: close(fifo); unlink(fifoPath);