net/tap: Use qemu_close_all_open_fd()

Instead of using a slow implementation to close all open fd after
forking, use qemu_close_all_open_fd().

Signed-off-by: Clément Léger <cleger@rivosinc.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20240802145423.3232974-6-cleger@rivosinc.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Clément Léger 2024-08-02 16:54:21 +02:00 committed by Richard Henderson
parent 7532ca570a
commit 9996a35c64

View File

@ -387,13 +387,20 @@ static TAPState *net_tap_fd_init(NetClientState *peer,
static void close_all_fds_after_fork(int excluded_fd) static void close_all_fds_after_fork(int excluded_fd)
{ {
int open_max = sysconf(_SC_OPEN_MAX), i; const int skip_fd[] = {STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO,
excluded_fd};
unsigned int nskip = ARRAY_SIZE(skip_fd);
for (i = 3; i < open_max; i++) { /*
if (i != excluded_fd) { * skip_fd must be an ordered array of distinct fds, exclude
close(i); * excluded_fd if already included in the [STDIN_FILENO - STDERR_FILENO]
} * range
*/
if (excluded_fd <= STDERR_FILENO) {
nskip--;
} }
qemu_close_all_open_fd(skip_fd, nskip);
} }
static void launch_script(const char *setup_script, const char *ifname, static void launch_script(const char *setup_script, const char *ifname,