From 10094b70970618617ebbb912813bd33e034938a7 Mon Sep 17 00:00:00 2001 From: Thomas Orozco Date: Sun, 18 Dec 2016 00:02:31 +0100 Subject: [PATCH] Fix PR_SET_CHILD_SUBREAPER call PR_SET_CHILD_SUBREAPER actually requires a non-zero argument to `prctl` in order to work..! Now, this used to work just fine (and currently works in most places) because when we use a libc that doesn't know about PR_SET_CHILD_SUBREAPER, it doesn't do anything about the second argument passed to `pctrl`, so we end up sending some junk in as the second argument. What we send appears to be completely random and as such seems very unlikely to be zero, and so things appear to work (e.g. the tests all pass, etc.). However, using a libc that does know about this argument (e.g. Ubuntu Xenial), things *don't* work because the second argument is automatically set to 0 when we don't provide one. This probably went unnoticed for a while considering that `tini-static` isn't affected (it's built on Trusty), and that this mode isn't enabled by default in the first place. --- src/tini.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tini.c b/src/tini.c index 1eea84b..60d4d88 100644 --- a/src/tini.c +++ b/src/tini.c @@ -306,7 +306,7 @@ int parse_env() { #if HAS_SUBREAPER int register_subreaper () { if (subreaper > 0) { - if (prctl(PR_SET_CHILD_SUBREAPER)) { + if (prctl(PR_SET_CHILD_SUBREAPER, 1)) { if (errno == EINVAL) { PRINT_FATAL("PR_SET_CHILD_SUBREAPER is unavailable on this platform. Are you using Linux >= 3.4?") } else {