74f361e
diff -up iptables-1.4.10/extensions/libipt_realm.c.cloexec iptables-1.4.10/extensions/libipt_realm.c
74f361e
--- iptables-1.4.10/extensions/libipt_realm.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/extensions/libipt_realm.c	2011-01-10 13:23:31.373335720 +0100
74f361e
@@ -49,7 +49,7 @@ static void load_realms(void)
74f361e
 	int id;
74f361e
 	struct realmname *oldnm = NULL, *newnm = NULL;
74f361e
 
74f361e
-	fil = fopen(rfnm, "r");
74f361e
+	fil = fopen(rfnm, "re");
74f361e
 	if (!fil) {
74f361e
 		rdberr = 1;
74f361e
 		return;
74f361e
diff -up iptables-1.4.10/extensions/libxt_set.h.cloexec iptables-1.4.10/extensions/libxt_set.h
74f361e
--- iptables-1.4.10/extensions/libxt_set.h.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/extensions/libxt_set.h	2011-01-10 13:23:31.374335743 +0100
74f361e
@@ -2,6 +2,7 @@
74f361e
 #define _LIBXT_SET_H
74f361e
 
74f361e
 #include <unistd.h>
74f361e
+#include <fcntl.h>
74f361e
 #include <sys/types.h>
74f361e
 #include <sys/socket.h>
74f361e
 #include <errno.h>
74f361e
@@ -23,6 +24,12 @@ get_version(unsigned *version)
74f361e
 		xtables_error(OTHER_PROBLEM,
74f361e
 			      "Can't open socket to ipset.\n");
74f361e
 
74f361e
+	if (fcntl(sockfd, F_SETFD, FD_CLOEXEC) == -1) {
74f361e
+		xtables_error(OTHER_PROBLEM,
74f361e
+			      "Could not set close on exec: %s\n",
74f361e
+			      strerror(errno));
74f361e
+	}
74f361e
+
74f361e
 	req_version.op = IP_SET_OP_VERSION;
74f361e
 	res = getsockopt(sockfd, SOL_IP, SO_IP_SET, &req_version, &size);
74f361e
 	if (res != 0)
74f361e
diff -up iptables-1.4.10/ip6tables-restore.c.cloexec iptables-1.4.10/ip6tables-restore.c
74f361e
--- iptables-1.4.10/ip6tables-restore.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/ip6tables-restore.c	2011-01-10 13:23:31.380335880 +0100
74f361e
@@ -169,7 +169,7 @@ int main(int argc, char *argv[])
74f361e
 	}
74f361e
 
74f361e
 	if (optind == argc - 1) {
74f361e
-		in = fopen(argv[optind], "r");
74f361e
+		in = fopen(argv[optind], "re");
74f361e
 		if (!in) {
74f361e
 			fprintf(stderr, "Can't open %s: %s\n", argv[optind],
74f361e
 				strerror(errno));
74f361e
diff -up iptables-1.4.10/ip6tables-save.c.cloexec iptables-1.4.10/ip6tables-save.c
74f361e
--- iptables-1.4.10/ip6tables-save.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/ip6tables-save.c	2011-01-10 13:23:31.381335904 +0100
74f361e
@@ -41,7 +41,7 @@ static int for_each_table(int (*func)(co
74f361e
 	FILE *procfile = NULL;
74f361e
 	char tablename[IP6T_TABLE_MAXNAMELEN+1];
74f361e
 
74f361e
-	procfile = fopen("/proc/net/ip6_tables_names", "r");
74f361e
+	procfile = fopen("/proc/net/ip6_tables_names", "re");
74f361e
 	if (!procfile)
74f361e
 		return ret;
74f361e
 
74f361e
diff -up iptables-1.4.10/iptables-restore.c.cloexec iptables-1.4.10/iptables-restore.c
74f361e
--- iptables-1.4.10/iptables-restore.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/iptables-restore.c	2011-01-10 13:23:31.383335950 +0100
74f361e
@@ -175,7 +175,7 @@ main(int argc, char *argv[])
74f361e
 	}
74f361e
 
74f361e
 	if (optind == argc - 1) {
74f361e
-		in = fopen(argv[optind], "r");
74f361e
+		in = fopen(argv[optind], "re");
74f361e
 		if (!in) {
74f361e
 			fprintf(stderr, "Can't open %s: %s\n", argv[optind],
74f361e
 				strerror(errno));
74f361e
diff -up iptables-1.4.10/iptables-save.c.cloexec iptables-1.4.10/iptables-save.c
74f361e
--- iptables-1.4.10/iptables-save.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/iptables-save.c	2011-01-10 13:23:31.383335950 +0100
74f361e
@@ -39,7 +39,7 @@ static int for_each_table(int (*func)(co
74f361e
 	FILE *procfile = NULL;
74f361e
 	char tablename[IPT_TABLE_MAXNAMELEN+1];
74f361e
 
74f361e
-	procfile = fopen("/proc/net/ip_tables_names", "r");
74f361e
+	procfile = fopen("/proc/net/ip_tables_names", "re");
74f361e
 	if (!procfile)
74f361e
 		return ret;
74f361e
 
74f361e
diff -up iptables-1.4.10/iptables-xml.c.cloexec iptables-1.4.10/iptables-xml.c
74f361e
--- iptables-1.4.10/iptables-xml.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/iptables-xml.c	2011-01-10 13:23:31.385335996 +0100
74f361e
@@ -653,7 +653,7 @@ main(int argc, char *argv[])
74f361e
 	}
74f361e
 
74f361e
 	if (optind == argc - 1) {
74f361e
-		in = fopen(argv[optind], "r");
74f361e
+		in = fopen(argv[optind], "re");
74f361e
 		if (!in) {
74f361e
 			fprintf(stderr, "Can't open %s: %s", argv[optind],
74f361e
 				strerror(errno));
74f361e
diff -up iptables-1.4.10/libiptc/libiptc.c.cloexec iptables-1.4.10/libiptc/libiptc.c
74f361e
--- iptables-1.4.10/libiptc/libiptc.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/libiptc/libiptc.c	2011-01-10 13:23:31.387336042 +0100
74f361e
@@ -29,6 +29,8 @@
74f361e
  * 	- performance work: speedup initial ruleset parsing.
74f361e
  * 	- sponsored by ComX Networks A/S (http://www.comx.dk/)
74f361e
  */
74f361e
+#include <unistd.h>
74f361e
+#include <fcntl.h>
74f361e
 #include <sys/types.h>
74f361e
 #include <sys/socket.h>
74f361e
 #include <xtables.h>
74f361e
@@ -1328,6 +1330,12 @@ TC_INIT(const char *tablename)
74f361e
 	if (sockfd < 0)
74f361e
 		return NULL;
74f361e
 
74f361e
+	if (fcntl(sockfd, F_SETFD, FD_CLOEXEC) == -1) {
74f361e
+		fprintf(stderr, "Could not set close on exec: %s\n",
74f361e
+			strerror(errno));
74f361e
+		abort();
74f361e
+	}
74f361e
+
74f361e
 retry:
74f361e
 	s = sizeof(info);
74f361e
 
74f361e
diff -up iptables-1.4.10/xtables.c.cloexec iptables-1.4.10/xtables.c
74f361e
--- iptables-1.4.10/xtables.c.cloexec	2010-10-29 16:37:22.000000000 +0200
74f361e
+++ iptables-1.4.10/xtables.c	2011-01-10 13:25:06.548552918 +0100
74f361e
@@ -285,6 +285,12 @@ static char *get_modprobe(void)
74f361e
 	if (procfile < 0)
74f361e
 		return NULL;
74f361e
 
74f361e
+	if (fcntl(procfile, F_SETFD, FD_CLOEXEC) == -1) {
74f361e
+		fprintf(stderr, "Could not set close on exec: %s\n",
74f361e
+			strerror(errno));
74f361e
+		exit(1);
74f361e
+	}
74f361e
+
74f361e
 	ret = malloc(PROCFILE_BUFSIZ);
74f361e
 	if (ret) {
74f361e
 		memset(ret, 0, PROCFILE_BUFSIZ);
74f361e
@@ -680,6 +686,12 @@ static int compatible_revision(const cha
74f361e
 		exit(1);
74f361e
 	}
74f361e
 
74f361e
+	if (fcntl(sockfd, F_SETFD, FD_CLOEXEC) == -1) {
74f361e
+		fprintf(stderr, "Could not set close on exec: %s\n",
74f361e
+			strerror(errno));
74f361e
+		exit(1);
74f361e
+	}
74f361e
+
74f361e
 	xtables_load_ko(xtables_modprobe_program, true);
74f361e
 
74f361e
 	strcpy(rev.name, name);