[master] cf17fc1 Close std{in|out|err} before invoking Eric.

Poul-Henning Kamp phk at FreeBSD.org
Sat Jan 7 11:39:05 CET 2017


commit cf17fc1671f44b58cb81f9eb14b21f13139593f1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Sat Jan 7 10:37:20 2017 +0000

    Close std{in|out|err} before invoking Eric.

diff --git a/bin/varnishd/mgt/mgt_main.c b/bin/varnishd/mgt/mgt_main.c
index 5242370..11d1625 100644
--- a/bin/varnishd/mgt/mgt_main.c
+++ b/bin/varnishd/mgt/mgt_main.c
@@ -575,6 +575,36 @@ mgt_eric(void)
 		exit(-1);
 }
 
+static void
+mgt_eric_im_done(int eric_fd, unsigned u)
+{
+	int fd;
+
+	if (eric_fd < 0)
+		return;
+
+	if (u == 0)
+		u = ERIC_MAGIC;
+
+	fd = open("/dev/null", O_RDONLY);
+	assert(fd >= 0);
+	assert(dup2(fd, STDIN_FILENO) == STDIN_FILENO);
+	AZ(close(fd));
+
+	fd = open("/dev/null", O_WRONLY);
+	assert(fd >= 0);
+	assert(dup2(fd, STDOUT_FILENO) == STDOUT_FILENO);
+	AZ(close(fd));
+
+	fd = open("/dev/null", O_WRONLY);
+	assert(fd >= 0);
+	assert(dup2(fd, STDERR_FILENO) == STDERR_FILENO);
+	AZ(close(fd));
+
+	assert(write(eric_fd, &u, sizeof u) == sizeof u);
+	AZ(close(eric_fd));
+}
+
 /*--------------------------------------------------------------------*/
 
 int
@@ -906,12 +936,7 @@ main(int argc, char * const *argv)
 
 	u = MGT_Run();
 
-	if (eric_fd > 0) {
-		if (u == 0)
-			u = ERIC_MAGIC;
-		assert(write(eric_fd, &u, sizeof u) == sizeof u);
-		AZ(close(eric_fd));
-	}
+	mgt_eric_im_done(eric_fd, u);
 
 	o = vev_schedule(mgt_evb);
 	if (o != 0)



More information about the varnish-commit mailing list