|
Message-Id: <1639925208.rmnuvpezrd.none@localhost> Date: Sun, 19 Dec 2021 09:54:32 -0500 From: "Alex Xu (Hello71)" <alex_y_xu@...oo.ca> To: musl@...ts.openwall.com, Markus Wichmann <nullplan@....net> Subject: Re: Feasibility of FD_CLOEXEC on all streams Excerpts from Rich Felker's message of December 18, 2021 12:26 pm: > On Sat, Dec 18, 2021 at 12:14:15PM -0500, Rich Felker wrote: >> On Sat, Dec 18, 2021 at 05:33:20PM +0100, Markus Wichmann wrote: >> > Hi all, >> > >> > I was recently reading the source code of popen(), and noticed that it >> > has to iterate over all open files to close all the open pipe FDs the >> > child might inherit. And that made me wonder: >> > >> > 1. Does POSIX allow for all FILE streams to have FD_CLOEXEC applied by >> > default? >> >> No. Accessing fileno(f) is permissible subject to following the rules >> for active handle: >> >> https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01 >> >> and that entails being able to use them according to the rules for how >> fds are inherited across exec. > > Also, the POSIX spec for fopen is rather explicit: > > "[CX] The file descriptor associated with the opened stream shall > be allocated and opened as if by a call to open() with the > following flags: ..." > > https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html > > Rich > Playing devil's advocate here, can't the implementation unset FD_CLOEXEC when fileno is called? This doesn't fix the latter issue, but if that's the only problem then I would argue that it can be sufficiently covered by the as-if rule. It also wouldn't fix the popen loop, but would still add some hardening for poorly written programs. Cheers, Alex.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.