]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Create more sockets with SOCK_CLOEXEC [BZ #15722]
authorFlorian Weimer <fweimer@redhat.com>
Wed, 19 Apr 2017 05:45:04 +0000 (07:45 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Wed, 19 Apr 2017 05:45:04 +0000 (07:45 +0200)
ChangeLog
inet/rcmd.c
inet/rexec.c
nis/nis_findserv.c
resolv/res_hconf.c
resolv/res_send.c
sysdeps/posix/getaddrinfo.c
sysdeps/unix/sysv/linux/check_native.c
sysdeps/unix/sysv/linux/ifaddrs.c

index 28fcdb24c72e730efab6399be0a3adce0f38e688..a48c888fc1ba733acbf9b20c8b783bb7b725de8b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2017-04-19  Florian Weimer  <fweimer@redhat.com>
+
+       [BZ #15722]
+       * resolv/res_hconf.c (_res_hconf_reorder_addrs): Create socket
+       with SOCK_CLOEXEC.
+       * resolv/res_send.c (send_vc, reopen): Likewise.
+       * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
+       * sysdeps/unix/sysv/linux/check_native.c (__check_native):
+       Likewise.
+       * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_open): Likewise.
+       * inet/rexec.c (rexec_af): Add comment.
+       * inet/rcmd.c (rresvport_af): Likewise.
+
 2017-04-19  Florian Weimer  <fweimer@redhat.com>
 
        * nscd/connections.c (have_accept4): Removed definition.
index b7cc7a82ba0ac1b39ccf03c589e00114b0bc79a5..e43d4af8183285e60e61c4515bb8710b043a8057 100644 (file)
@@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
                __set_errno (EAFNOSUPPORT);
                return -1;
        }
+       /* NB: No SOCK_CLOXEC for backwards compatibility.  */
        s = __socket(family, SOCK_STREAM, 0);
        if (s < 0)
                return -1;
index 43fb67bcf2c6d4fdff9e8dcd053786ab523f7aa1..82e15aef0542fb90f7690db1bf8e4bba967aadb4 100644 (file)
@@ -86,6 +86,7 @@ rexec_af (char **ahost, int rport, const char *name, const char *pass,
        }
        ruserpass(res0->ai_canonname, &name, &pass);
 retry:
+       /* NB: No SOCK_CLOXEC for backwards compatibility.  */
        s = __socket(res0->ai_family, res0->ai_socktype, 0);
        if (s < 0) {
                perror("rexec: socket");
index 77f3c7c3cea14fbc7db646d110b2d4f2834a201d..8e01164e3db9252e99811b6674d99f19e5407d55 100644 (file)
@@ -142,7 +142,7 @@ __nis_findfastest_with_timeout (dir_binding *bind,
     }
 
   /* Create RPC handle */
-  sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+  sock = socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP);
   clnt = clntudp_create (&saved_sin, NIS_PROG, NIS_VERSION, *timeout, &sock);
   if (clnt == NULL)
     {
index d0d116d308b31b40fe647ec87dd2149a28ccddd0..8fc06e9abdc084f6988e543bb402afb6d201fe9b 100644 (file)
@@ -388,7 +388,7 @@ _res_hconf_reorder_addrs (struct hostent *hp)
       /* Initialize interface table.  */
 
       /* The SIOCGIFNETMASK ioctl will only work on an AF_INET socket.  */
-      sd = __socket (AF_INET, SOCK_DGRAM, 0);
+      sd = __socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
       if (sd < 0)
        return;
 
index ffb9a6af7b8a1cd934f6e82ab1a8ad656d073c6a..3de0b3e07c8b535d5c45299a94f7fba3b305a4da 100644 (file)
@@ -692,7 +692,8 @@ send_vc(res_state statp,
                if (statp->_vcsock >= 0)
                  __res_iclose(statp, false);
 
-               statp->_vcsock = socket(nsap->sa_family, SOCK_STREAM, 0);
+               statp->_vcsock = socket
+                 (nsap->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
                if (statp->_vcsock < 0) {
                        *terrno = errno;
                        Perror(statp, stderr, "socket(vc)", errno);
@@ -902,14 +903,16 @@ reopen (res_state statp, int *terrno, int ns)
 
                /* only try IPv6 if IPv6 NS and if not failed before */
                if (nsap->sa_family == AF_INET6 && !statp->ipv6_unavail) {
-                       EXT(statp).nssocks[ns]
-                               = socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, 0);
+                       EXT(statp).nssocks[ns] = socket
+                         (PF_INET6,
+                          SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
                        if (EXT(statp).nssocks[ns] < 0)
                            statp->ipv6_unavail = errno == EAFNOSUPPORT;
                        slen = sizeof (struct sockaddr_in6);
                } else if (nsap->sa_family == AF_INET) {
-                       EXT(statp).nssocks[ns]
-                               = socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0);
+                       EXT(statp).nssocks[ns] = socket
+                         (PF_INET,
+                          SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
                        slen = sizeof (struct sockaddr_in);
                }
                if (EXT(statp).nssocks[ns] < 0) {
index eed7264850307b6b65b055a6936dc6362d5b3ff9..a55cc39be77a220af66a340c4f87d08d6f66087e 100644 (file)
@@ -2472,7 +2472,7 @@ getaddrinfo (const char *name, const char *service,
                  close_retry:
                    close_not_cancel_no_status (fd);
                  af = q->ai_family;
-                 fd = __socket (af, SOCK_DGRAM, IPPROTO_IP);
+                 fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP);
                }
              else
                {
index 4a1646089ffb7f1e501f66b949e48706ff847e08..7e5a7c9be30c05e7bfaf0b7d281054caaaed29e2 100644 (file)
@@ -41,7 +41,7 @@ void
 __check_native (uint32_t a1_index, int *a1_native,
                uint32_t a2_index, int *a2_native)
 {
-  int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+  int fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
 
   struct sockaddr_nl nladdr;
   memset (&nladdr, '\0', sizeof (nladdr));
index cff12c2ac45177410ca7e8609f0bd28db3bf6113..3bc99028639c71492029605e3399332ba2f53ab2 100644 (file)
@@ -255,7 +255,7 @@ __netlink_open (struct netlink_handle *h)
 {
   struct sockaddr_nl nladdr;
 
-  h->fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+  h->fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
   if (h->fd < 0)
     goto out;