bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS) does not close extra fds
Peter Korsgaard
peter at korsgaard.com
Thu Mar 14 16:15:59 UTC 2019
On Thu, Mar 14, 2019 at 4:35 PM Arnout Vandecappelle <arnout at mind.be> wrote:
> The problem is that the assumption that open() returns an fd that is larger
> than all existing fds is simply wrong.
>
> I think that there is no other way to close all open fds than to iterate over
> /proc/self/fd. But that is of course not very portable.
This particular issue could be fixed by rewriting the logic to something like:
int keep = 2;
if (flags & DAEMON_DEVNULL_STDIO)
keep = -1;
fd = open(bb_dev_null, O_RDWR);
..
while (fd > keep) {
close(fd--);
}
But yeah, the other problem persists. I don't know of any other
solutions besides using a hardcoded max-fd. I believe the classic
limit used by select is 1024.
--
Bye, Peter Korsgaard
More information about the busybox
mailing list