changeset 39348:48c741c6c35d

af_alg: don’t leak file descriptors into children * lib/af_alg.c (alg_socket): Use SOCK_CLOEXEC when creating sockets. This code should be compiled only on recent GNU/Linux platforms so we shouldn’t have to also depend on the accept4 module.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 09 May 2018 11:34:28 -0700
parents f9dc53a50a90
children 2ccd065bf0a0
files ChangeLog lib/af_alg.c
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed May 09 11:16:59 2018 -0700
+++ b/ChangeLog	Wed May 09 11:34:28 2018 -0700
@@ -1,5 +1,10 @@
 2018-05-09  Paul Eggert  <eggert@cs.ucla.edu>
 
+	af_alg: don’t leak file descriptors into children
+	* lib/af_alg.c (alg_socket): Use SOCK_CLOEXEC when creating sockets.
+	This code should be compiled only on recent GNU/Linux platforms
+	so we shouldn’t have to also depend on the accept4 module.
+
 	af_alg: coalesce socket creation
 	* lib/af_alg.c (alg_socket): New function.
 	(afalg_buffer, afalg_stream): Use it.  This avoids some
--- a/lib/af_alg.c	Wed May 09 11:16:59 2018 -0700
+++ b/lib/af_alg.c	Wed May 09 11:34:28 2018 -0700
@@ -49,11 +49,11 @@
     if (i == sizeof salg.salg_name - 1)
       return -EINVAL;
 
-  int cfd = socket (AF_ALG, SOCK_SEQPACKET, 0);
+  int cfd = socket (AF_ALG, SOCK_SEQPACKET | SOCK_CLOEXEC, 0);
   if (cfd < 0)
     return -EAFNOSUPPORT;
   int ofd = (bind (cfd, (struct sockaddr *) &salg, sizeof salg) == 0
-             ? accept (cfd, NULL, 0)
+             ? accept4 (cfd, NULL, 0, SOCK_CLOEXEC)
              : -1);
   close (cfd);
   return ofd < 0 ? -EAFNOSUPPORT : ofd;