posix: Fix open file action for posix_spawn on Linux
commite83be730910c341f2f02ccc207b0586bb04fc21a
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 16 Sep 2016 20:44:50 +0000 (16 17:44 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.com>
Wed, 28 Sep 2016 21:07:35 +0000 (28 14:07 -0700)
tree6f8ff0de28073a7706be43359fa45fa50ea1b3f3
parent4b4d4056bb154603f36c6f8845757c1012758158
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
ChangeLog
posix/Makefile
posix/tst-spawn3.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/spawni.c