Re: _cleanup() vs Linux fcloseall()

From: Kostik Belousov <kostikbel_at_gmail.com>
Date: Thu, 30 Mar 2006 11:39:07 +0300
On Thu, Mar 30, 2006 at 07:16:19PM +1100, Peter Jeremy wrote:
> On Thu, 2006-Mar-30 00:41:00 +0200, Maxime Henrion wrote:
> >John Baldwin wrote:
> >> I would vote for fcloseall() personally.
> >
> >Seconded.
> 
> I'd prefer to see a function that closed all file descriptors greater
> than a specified limit (which makes it easy for a process to preserve
> stdin/out/err but close everything else).  Two obvious places for this
> would be:
> - At the beginning of a setuid program (making sure that the user hasn't
>   passed in any unexpected open FDs).
> - Before an exec() to prevent fd's leaking into a child.
> 
> >Does fcloseall() really closes all the open file descriptors?  The name
> >suggests that it will close all the FILE * streams instead, which is not
> >quite the same.  The manpage I found on the net seems to confirm this
> >indirectly by saying that fflush() is used prior to closing the streams.
> 
> Something that just closed all stdio FILE streams would be far less
> useful (close to totally useless IMHO) than something that closed file
> descriptors.
> 
> >FWIW, NetBSD has something that close all the file descriptors, and it's
> >done with fcntl(fd, F_CLOSEM) (using fcntl() on one file descriptor to
> >close all of them looks a bit weird to me, but well...).
> 
> If it close any fd's numerically greater than the passed fd, that would
> make a lot of sense.

According to fcntl(2) manpage from the netbsd, this is exactly the
functionality of F_CLOSEM. FreeBSD already has a way to close all
file descriptors: rfork(RFCFDG).

Received on Thu Mar 30 2006 - 06:39:15 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:54 UTC