esnet / esnet/iperf

Segfault during `cleanup_server` for bidirectional or with parallel stream tests ended early

Open
#1,696 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
8.8k
Forks
1.5k
PR merge metrics
No merged PRs in 30d

Description

# Context

* Version of iperf3: 3.16

* Hardware: N/A

* Operating system (and distribution, if any): 6.5.0-26-generic # 26~22.04.1-Ubuntu

* Other relevant information (for example, non-default compilers,
libraries, cross-compiling, etc.): N/A

# Bug Report

While doing some testing I would occasionally use the wrong iperf flags/parameters and would terminate the test early rather than waiting for it to run completely.

* Expected Behavior: Terminating a test early causes the client and server to stop testing. The client cleans up and terminates. The server cleans up and prepares for next test.

* Actual Behavior: Server segfaults during cleanup

* Steps to Reproduce
1. Simulate a high-ish latency link on the loopback interface: `tc qdisc add dev lo root netem delay 50ms`
2. Start server: `iperf3 -s`
3. Start client and terminate test early: `iperf3 -c 127.0.0.1 -t 10 -P 10` or `iperf3 -c 127.0.0.1 -t 10 --bidir`
* It seems to be a race condition so to have better chances at finding it I'll typically run something like `for i in $(seq 100); do iperf3 -c 127.0.0.1 -t 10 -P 10; done` then repeatedly use ctrl-c to kill tests.
4. Check server crashed

* Possible Solution
Adding an assert into the code [here](https://github.com/esnet/iperf/blob/master/src/iperf_server_api.c#L421) shows the root cause. Something like `assert(sp->thr != 0);`. This would indicate that a NULL values is being passed into `pthread_cancel`. A possible solution would be a NULL check before attempting to cancel the thread.

* Other observations
I was not able to reproduce the issue using 3.15 as the server.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.