From 50d7410b895a1aae26c7001f11bd0d71a200ef96 Mon Sep 17 00:00:00 2001 From: Oskari Saarenmaa Date: Wed, 2 Nov 2016 16:42:36 +0200 Subject: [PATCH] BasicOpenFile: always use O_CLOEXEC if it is available --- src/backend/storage/file/fd.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git src/backend/storage/file/fd.c src/backend/storage/file/fd.c index b7ff5ef..6cbe378 100644 --- src/backend/storage/file/fd.c +++ src/backend/storage/file/fd.c @@ -894,7 +894,19 @@ BasicOpenFile(FileName fileName, int fileFlags, int fileMode) int fd; tryAgain: - fd = open(fileName, fileFlags, fileMode); + fd = open(fileName, fileFlags, fileMode +#if defined(O_CLOEXEC) && !defined(EXEC_BACKEND) + /* + * We don't want exec'd processes to inherit our file handles unless + * EXEC_BACKEND is used. We don't expect execve() calls inside the + * postgres code, but extensions and pl-languages may spawn new + * processes that either don't work due to having no usable file + * descriptors or write garbage in the files previously opened by + * us. + */ + | O_CLOEXEC +#endif + ); if (fd >= 0) return fd; /* success! */ -- 2.5.5