mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
posix: Fix open file action for posix_spawn on Linux
On posix_spawn open file action (issued by posix_spawn_file_actions_addopen) POSIX states that if fildes was already an open file descriptor, it shall be closed before the new file is openedi [1]. This avoid pontential issues when posix_spawn plus addopen action is called with the process already at maximum number of file descriptor opened and also for multiple actions on single-open special paths (like /dev/watchdog). This fixes its behavior on Linux posix_spawn implementation and also adds a tests to check for its behavior. Checked on x86_64. * posix/Makefile (tests): Add tst-spawn3. * posix/tst-spawn3.c: New file. * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Close file descriptor if it is already opened for open action. [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_addclose.html
This commit is contained in:
committed by
Adhemerval Zanella
parent
4b4d4056bb
commit
e83be73091
@ -219,6 +219,14 @@ __spawni_child (void *arguments)
|
||||
|
||||
case spawn_do_open:
|
||||
{
|
||||
/* POSIX states that if fildes was already an open file descriptor,
|
||||
it shall be closed before the new file is opened. This avoid
|
||||
pontential issues when posix_spawn plus addopen action is called
|
||||
with the process already at maximum number of file descriptor
|
||||
opened and also for multiple actions on single-open special
|
||||
paths (like /dev/watchdog). */
|
||||
close_not_cancel (action->action.open_action.fd);
|
||||
|
||||
ret = open_not_cancel (action->action.open_action.path,
|
||||
action->action.
|
||||
open_action.oflag | O_LARGEFILE,
|
||||
|
Reference in New Issue
Block a user