Just use O_CLOEXEC or SOCK_CLOEXEC on everything. There is no reason to
keep any kind of file descriptor over an exec call. At least this way
I'm sure that no fds will leak into the childs.

OK?
-- 
:wq Claudio

? obj
Index: carp.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/carp.c,v
retrieving revision 1.9
diff -u -p -r1.9 carp.c
--- carp.c      24 Jan 2017 04:22:42 -0000      1.9
+++ carp.c      8 Aug 2019 11:33:37 -0000
@@ -108,7 +108,7 @@ carp_demote_get(char *group)
        int                     s;
        struct ifgroupreq       ifgr;
 
-       if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+       if ((s = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0)) == -1) {
                log_warn("carp_demote_get: socket");
                return (-1);
        }
@@ -162,7 +162,7 @@ carp_demote_ioctl(char *group, int demot
        int                     s, res;
        struct ifgroupreq       ifgr;
 
-       if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+       if ((s = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0)) == -1) {
                log_warn("%s: socket", __func__);
                return (-1);
        }
Index: control.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/control.c,v
retrieving revision 1.97
diff -u -p -r1.97 control.c
--- control.c   27 May 2019 09:14:32 -0000      1.97
+++ control.c   8 Aug 2019 11:33:37 -0000
@@ -47,7 +47,7 @@ control_check(char *path)
        sun.sun_family = AF_UNIX;
        strlcpy(sun.sun_path, path, sizeof(sun.sun_path));
 
-       if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+       if ((fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) {
                log_warn("%s: socket", __func__);
                return (-1);
        }
Index: kroute.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v
retrieving revision 1.237
diff -u -p -r1.237 kroute.c
--- kroute.c    23 Jul 2019 06:26:44 -0000      1.237
+++ kroute.c    8 Aug 2019 11:33:37 -0000
@@ -2886,7 +2886,7 @@ get_mpe_config(const char *name, u_int *
        *label = 0;
        *rdomain = 0;
 
-       s = socket(AF_INET, SOCK_DGRAM, 0);
+       s = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
        if (s == -1)
                return (-1);
 
Index: mrt.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/mrt.c,v
retrieving revision 1.99
diff -u -p -r1.99 mrt.c
--- mrt.c       24 Jul 2019 08:58:24 -0000      1.99
+++ mrt.c       8 Aug 2019 11:33:38 -0000
@@ -908,7 +908,7 @@ mrt_open(struct mrt *mrt, time_t now)
        }
 
        fd = open(MRT2MC(mrt)->file,
-           O_WRONLY|O_NONBLOCK|O_CREAT|O_TRUNC, 0644);
+           O_WRONLY|O_NONBLOCK|O_CREAT|O_TRUNC|O_CLOEXEC, 0644);
        if (fd == -1) {
                log_warn("mrt_open %s", MRT2MC(mrt)->file);
                return (1);
Index: pftable.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/pftable.c,v
retrieving revision 1.13
diff -u -p -r1.13 pftable.c
--- pftable.c   28 Jun 2019 13:32:47 -0000      1.13
+++ pftable.c   8 Aug 2019 11:33:38 -0000
@@ -63,7 +63,7 @@ pftable_change(struct pf_table *pft)
        if (pft->naddrs == 0 || pft->what == 0)
                return (0);
 
-       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR)) == -1))
+       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR|O_CLOEXEC)) == -1))
                fatal("open(/dev/pf)");
 
        bzero(&tio, sizeof(tio));
@@ -90,7 +90,7 @@ pftable_clear(const char *name)
 {
        struct pfioc_table tio;
 
-       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR)) == -1))
+       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR|O_CLOEXEC)) == -1))
                fatal("open(/dev/pf)");
 
        bzero(&tio, sizeof(tio));
@@ -111,7 +111,7 @@ pftable_exists(const char *name)
        struct pfioc_table tio;
        struct pfr_astats dummy;
 
-       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR)) == -1))
+       if (devpf == -1 && ((devpf = open("/dev/pf", O_RDWR|O_CLOEXEC)) == -1))
                fatal("open(/dev/pf)");
 
        bzero(&tio, sizeof(tio));

Reply via email to