On Wed, Apr 19, 2023 at 12:02 PM Sergey Bugaev <buga...@gmail.com> wrote:

> stdin is supposed to be readable, stdout and stderr writable. Otherwise,
> we get this:
>
> index de6dd716..ca4812cd 100644
> --- a/csu/check_fds.c
> +++ b/csu/check_fds.c
> @@ -90,7 +90,7 @@ __libc_check_standard_fds (void)
>       is really paranoid but some people actually are.  If /dev/null
>       should happen to be a symlink to somewhere else and not the
>       device commonly known as "/dev/null" we bail out.  */
> -  check_one_fd (STDIN_FILENO, O_WRONLY | O_NOFOLLOW);
> -  check_one_fd (STDOUT_FILENO, O_RDONLY | O_NOFOLLOW);
> -  check_one_fd (STDERR_FILENO, O_RDONLY | O_NOFOLLOW);
> +  check_one_fd (STDIN_FILENO, O_RDONLY | O_NOFOLLOW);
> +  check_one_fd (STDOUT_FILENO, O_WRONLY | O_NOFOLLOW);
> +  check_one_fd (STDERR_FILENO, O_WRONLY | O_NOFOLLOW);
>  }
> --
> 2.40.0
>

Im a little bit lost on what it was supposed to do in this old form..  as
the open flags are all wrong..

Changelog says:

 (__libc_check_standard_fds): Reverse modes so that common operations on
        the descriptors fail.

So this was intended at some point in the past decades to make it fail..  I
see it is used only for SUID statically linked binaries. is this really
needed now? playing silly games with this fds will always result in silly
prices.

Reply via email to