From 90c65458d3e36fdccb5121e10de649fcb610ee5e Mon Sep 17 00:00:00 2001 From: WatcherOfTheSkies Date: Thu, 22 Jan 2026 17:11:29 +0000 Subject: [PATCH 1/4] Set closed file descriptors to -1 --- src/iperf_api.c | 12 ++++++++++-- src/iperf_client_api.c | 8 ++++++-- src/iperf_server_api.c | 7 +++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/iperf_api.c b/src/iperf_api.c index b41368709..626318383 100644 --- a/src/iperf_api.c +++ b/src/iperf_api.c @@ -4691,8 +4691,14 @@ iperf_free_stream(struct iperf_stream *sp) /* XXX: need to free interval list too! */ munmap(sp->buffer, sp->test->settings->blksize); close(sp->buffer_fd); - if (sp->diskfile_fd >= 0) - close(sp->diskfile_fd); + sp->buffer_fd = -1; + + if (sp->diskfile_fd >= 0) { + close(sp->diskfile_fd); + sp->diskfile_fd = -1; + } + + for (irp = TAILQ_FIRST(&sp->result->interval_results); irp != NULL; irp = nirp) { nirp = TAILQ_NEXT(irp, irlistentries); free(irp); @@ -4812,6 +4818,8 @@ iperf_new_stream(struct iperf_test *test, int s, int sender) if ((ret < 0) || (iperf_init_stream(sp, test) < 0)) { close(sp->buffer_fd); + sp->buffer_fd = -1; + munmap(sp->buffer, sp->test->settings->blksize); free(sp->result); free(sp); diff --git a/src/iperf_client_api.c b/src/iperf_client_api.c index 37d741f87..b3b23848f 100644 --- a/src/iperf_client_api.c +++ b/src/iperf_client_api.c @@ -547,6 +547,7 @@ iperf_client_end(struct iperf_test *test) /* Close all stream sockets */ SLIST_FOREACH(sp, &test->streams, streams) { close(sp->socket); + sp->socket = -1; } /* show final summary */ @@ -559,9 +560,12 @@ iperf_client_end(struct iperf_test *test) } /* Close control socket */ - if (test->ctrl_sck >= 0) + if (test->ctrl_sck >= 0) { + close(test->ctrl_sck); - + test->ctrl_sck = -1; + } + return 0; } diff --git a/src/iperf_server_api.c b/src/iperf_server_api.c index e9313244f..57b990a97 100644 --- a/src/iperf_server_api.c +++ b/src/iperf_server_api.c @@ -274,6 +274,7 @@ iperf_handle_message_server(struct iperf_test *test) FD_CLR(sp->socket, &test->read_set); FD_CLR(sp->socket, &test->write_set); close(sp->socket); + sp->socket = -1; } test->reporter_callback(test); if (iperf_set_send_state(test, EXCHANGE_RESULTS) != 0) @@ -304,6 +305,7 @@ iperf_handle_message_server(struct iperf_test *test) FD_CLR(sp->socket, &test->read_set); FD_CLR(sp->socket, &test->write_set); close(sp->socket); + sp->socket = -1; } iperf_set_test_state(test, IPERF_DONE); break; @@ -330,6 +332,7 @@ server_timer_proc(TimerClientData client_data, struct iperf_time *nowP) sp = SLIST_FIRST(&test->streams); SLIST_REMOVE_HEAD(&test->streams, streams); close(sp->socket); + sp->socket = -1; iperf_free_stream(sp); } close(test->ctrl_sck); @@ -852,9 +855,9 @@ iperf_run_server(struct iperf_test *test) if (test->no_delay || test->settings->mss || test->settings->socket_bufsize) { FD_CLR(test->listener, &test->read_set); close(test->listener); - test->listener = -1; + test->listener = -1; if ((s = netannounce(test->settings->domain, Ptcp, test->bind_address, test->bind_dev, test->server_port)) < 0) { - cleanup_server(test); + cleanup_server(test); i_errno = IELISTEN; return -1; } From 9b8f42d7daa8c551eacd3931a1c86f0e92569496 Mon Sep 17 00:00:00 2001 From: WatcherOfTheSkies Date: Fri, 23 Jan 2026 10:38:22 +0000 Subject: [PATCH 2/4] Trigger CI From 25c16bd68702a70a8b7ff8e1bdf4582e27896141 Mon Sep 17 00:00:00 2001 From: WatcherOfTheSkies Date: Fri, 23 Jan 2026 14:31:51 +0000 Subject: [PATCH 3/4] File tidy up, no functional change. --- src/iperf_client_api.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/iperf_client_api.c b/src/iperf_client_api.c index b3b23848f..124e16077 100644 --- a/src/iperf_client_api.c +++ b/src/iperf_client_api.c @@ -561,11 +561,10 @@ iperf_client_end(struct iperf_test *test) /* Close control socket */ if (test->ctrl_sck >= 0) { - close(test->ctrl_sck); test->ctrl_sck = -1; } - + return 0; } From 2845c76961e8a8fae6d689160f7b2ea0409c4433 Mon Sep 17 00:00:00 2001 From: WatcherOfTheSkies Date: Mon, 26 Jan 2026 16:48:33 +0000 Subject: [PATCH 4/4] Merge changes from #1990 --- src/iperf_server_api.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/iperf_server_api.c b/src/iperf_server_api.c index 57b990a97..60aaea191 100644 --- a/src/iperf_server_api.c +++ b/src/iperf_server_api.c @@ -321,20 +321,12 @@ static void server_timer_proc(TimerClientData client_data, struct iperf_time *nowP) { struct iperf_test *test = client_data.p; - struct iperf_stream *sp; test->timer = NULL; if (test->done) return; test->done = 1; - /* Free streams */ - while (!SLIST_EMPTY(&test->streams)) { - sp = SLIST_FIRST(&test->streams); - SLIST_REMOVE_HEAD(&test->streams, streams); - close(sp->socket); - sp->socket = -1; - iperf_free_stream(sp); - } + close(test->ctrl_sck); test->ctrl_sck = -1; }