Merge.
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 50bec29..814cfbe 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -1247,16 +1247,17 @@
                                     os.close(fd)
                                     closed.add(fd)
 
-                            # Close all other fds, if asked for
-                            if close_fds:
-                                self._close_fds(but=errpipe_write)
-
                             if cwd is not None:
                                 os.chdir(cwd)
 
                             if preexec_fn:
                                 preexec_fn()
 
+                            # Close all other fds, if asked for - after
+                            # preexec_fn(), which may open FDs.
+                            if close_fds:
+                                self._close_fds(but=errpipe_write)
+
                             if env is None:
                                 os.execvp(executable, args)
                             else: