g_mkstemp: Use O_CLOEXEC for race-free setting of the close-on-exec flag

mkstemp-like family of functions also use g_open () under the hood so
they should pass the O_CLOEXEC flag there for race-free setting of the
close-on-exec flag.
This commit is contained in:
Maciej S. Szmigiero 2023-02-22 00:38:13 +01:00
parent cbc15d6ceb
commit 8f8ebb1bd0
2 changed files with 4 additions and 4 deletions

View File

@ -1040,7 +1040,7 @@ handle_overwrite_open (const char *filename,
tmp_filename = g_build_filename (dirname, ".goutputstream-XXXXXX", NULL); tmp_filename = g_build_filename (dirname, ".goutputstream-XXXXXX", NULL);
g_free (dirname); g_free (dirname);
tmpfd = g_mkstemp_full (tmp_filename, (readable ? O_RDWR : O_WRONLY) | O_BINARY, mode); tmpfd = g_mkstemp_full (tmp_filename, (readable ? O_RDWR : O_WRONLY) | O_BINARY | O_CLOEXEC, mode);
if (tmpfd == -1) if (tmpfd == -1)
{ {
g_free (tmp_filename); g_free (tmp_filename);

View File

@ -1351,7 +1351,7 @@ g_file_set_contents_full (const gchar *filename,
tmp_filename = g_strdup_printf ("%s.XXXXXX", filename); tmp_filename = g_strdup_printf ("%s.XXXXXX", filename);
errno = 0; errno = 0;
fd = g_mkstemp_full (tmp_filename, O_RDWR | O_BINARY, mode); fd = g_mkstemp_full (tmp_filename, O_RDWR | O_BINARY | O_CLOEXEC, mode);
if (fd == -1) if (fd == -1)
{ {
@ -1704,7 +1704,7 @@ g_mkstemp_full (gchar *tmpl,
gint gint
g_mkstemp (gchar *tmpl) g_mkstemp (gchar *tmpl)
{ {
return g_mkstemp_full (tmpl, O_RDWR | O_BINARY, 0600); return g_mkstemp_full (tmpl, O_RDWR | O_BINARY | O_CLOEXEC, 0600);
} }
static gint static gint
@ -1826,7 +1826,7 @@ g_file_open_tmp (const gchar *tmpl,
result = g_get_tmp_name (tmpl, &fulltemplate, result = g_get_tmp_name (tmpl, &fulltemplate,
wrap_g_open, wrap_g_open,
O_CREAT | O_EXCL | O_RDWR | O_BINARY, O_CREAT | O_EXCL | O_RDWR | O_BINARY | O_CLOEXEC,
0600, 0600,
error); error);
if (result != -1) if (result != -1)