[PATCH] posix: Fix open file action for posix_spawn on Linux
Florian Weimer
fweimer@redhat.com
Mon Sep 19 12:53:00 GMT 2016
On 09/19/2016 02:41 PM, Adhemerval Zanella wrote:
> +/* Return if file descriptor is opened. */
> +static inline int
> +fd_is_valid (int fd)
> +{
> + return fcntl_not_cancel_2 (fd, F_GETFD) != -1 || errno != EBADF;
> +}
> +
> /* Function used in the clone call to setup the signals mask, posix_spawn
> attributes, and file actions. It run on its own stack (provided by the
> posix_spawn call). */
> @@ -219,6 +226,15 @@ __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). */
> + if (fd_is_valid (action->action.open_action.fd))
> + close_not_cancel (action->action.open_action.fd);
It's not clear to me why you can't just close the file descriptor
unconditionally. It does not seem to matter whether you perform fcntl
or close on an invalid file descriptor.
Thanks,
Florian
More information about the Libc-alpha
mailing list