41 lines
1.1 KiB
Text
41 lines
1.1 KiB
Text
- Close inherited file descriptors
|
|
|
|
wide-dhcpv6 binaries should close inherited fds.
|
|
|
|
- Close file descriptors on exec
|
|
|
|
Avoid FD leakage to children.
|
|
|
|
--- dhcp6relay.c.orig Sun Jun 15 03:48:41 2008
|
|
+++ dhcp6relay.c Sun Jan 10 00:50:57 2016
|
|
@@ -207,8 +207,14 @@ main(argc, argv)
|
|
}
|
|
|
|
if (foreground == 0) {
|
|
+ int fd;
|
|
+
|
|
if (daemon(0, 0) < 0)
|
|
err(1, "daemon");
|
|
+
|
|
+ for (fd = 3; fd < 1024; fd++)
|
|
+ close(fd);
|
|
+
|
|
openlog(progname, LOG_NDELAY|LOG_PID, LOG_DAEMON);
|
|
}
|
|
setloglevel(debug);
|
|
@@ -353,6 +359,7 @@ relay6_init(int ifnum, char *iflist[])
|
|
gai_strerror(error));
|
|
goto failexit;
|
|
}
|
|
+ res->ai_socktype |= SOCK_CLOEXEC;
|
|
csock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
|
if (csock < 0) {
|
|
dprintf(LOG_ERR, FNAME, "socket(csock): %s", strerror(errno));
|
|
@@ -459,6 +466,7 @@ relay6_init(int ifnum, char *iflist[])
|
|
goto failexit;
|
|
}
|
|
memcpy(&sa6_client, res->ai_addr, sizeof (sa6_client));
|
|
+ res->ai_socktype |= SOCK_CLOEXEC;
|
|
ssock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
|
if (ssock < 0) {
|
|
dprintf(LOG_ERR, FNAME, "socket(outsock): %s",
|