untrusted comment: verify with openbsd-67-base.pub RWRmkIA877Io3oO28Ts7Yye46ewSH+mwnUfRDh6Mk+FPp2tj0eysaZbC/XjIq1AT+LqVCpfJ/OGFlJ3eGDtucQf59bE2Axy2oAs= OpenBSD 6.7 errata 002, May 22, 2020: Fix rpki-client hang because of improper waitpid idiom for rsync processes. Apply by doing: signify -Vep /etc/signify/openbsd-67-base.pub -x 002_rpki.patch.sig \ -m - | (cd /usr/src && patch -p0) And then rebuild and install rpki-client: cd /usr/src/usr.sbin/rpki-client make obj make clean make make install Index: usr.sbin/rpki-client/main.c =================================================================== RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v diff -u -p -r1.69 main.c --- usr.sbin/rpki-client/main.c 6 May 2020 12:15:50 -0000 1.69 +++ usr.sbin/rpki-client/main.c 18 May 2020 02:29:05 -0000 @@ -649,27 +649,28 @@ proc_rsync(char *prog, char *bind_addr, * Then we respond to the parent. */ - if ((pid = waitpid(WAIT_ANY, &st, 0)) == -1) - err(1, "waitpid"); + while ((pid = waitpid(WAIT_ANY, &st, WNOHANG)) > 0) { + for (i = 0; i < idsz; i++) + if (ids[i].pid == pid) + break; + assert(i < idsz); - for (i = 0; i < idsz; i++) - if (ids[i].pid == pid) - break; - assert(i < idsz); + if (!WIFEXITED(st)) { + warnx("rsync %s terminated abnormally", + ids[i].uri); + rc = 1; + } else if (WEXITSTATUS(st) != 0) { + warnx("rsync %s failed", ids[i].uri); + } - if (!WIFEXITED(st)) { - warnx("rsync %s terminated abnormally", - ids[i].uri); - rc = 1; - } else if (WEXITSTATUS(st) != 0) { - warnx("rsync %s failed", ids[i].uri); + io_simple_write(fd, &ids[i].id, sizeof(size_t)); + free(ids[i].uri); + ids[i].uri = NULL; + ids[i].pid = 0; + ids[i].id = 0; } - - io_simple_write(fd, &ids[i].id, sizeof(size_t)); - free(ids[i].uri); - ids[i].uri = NULL; - ids[i].pid = 0; - ids[i].id = 0; + if (pid == -1 && errno != ECHILD) + err(1, "waitpid"); continue; }