Re: File descriptors in exec'd subprocesses

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org, Thomas Munro <thomas.munro@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2023-02-05T16:40:30Z
Lists: pgsql-hackers
Hi,

On 2023-02-05 11:06:13 -0500, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > On February 5, 2023 1:00:50 AM GMT+01:00, Thomas Munro <thomas.munro@gmail.com> wrote:
> >> Are there any more descriptors we need to think about?
> 
> > Postmaster's listen sockets?
> 
> I wonder whether O_CLOEXEC on that would be inherited by the
> client-communication sockets, though.

I'd be very suprised if it were.

<hack>

Nope, at least not on linux. Verified by looking at /proc/*/fdinfo/n
after adding SOCK_CLOEXEC to just the socket() call. 'flags' changes
from 02 -> 02000002 for the listen socket, but stays at 04002 for the
client socket. If I add SOCK_CLOEXEC to accept() (well, accept4()), it
does change from 04002 to 02004002.

Greetings,

Andres Freund



Commits

  1. libpq: Use modern socket flags, if available.

  2. Don't leak descriptors into subprograms.

  3. Remove obsolete coding for early macOS.

  4. Adjust commit 2dbe8905 for ancient macOS.