iperf3: upgrade to 3.21 - #18786
Draft
Siva Kannan (shivashanmugam) wants to merge 1 commit into
Draft
Conversation
Azure Linux 3.0 has been on iperf3 3.17.1 since Aug 2024 with security-only servicing. That leaves the package without the upstream multi-threading stability fixes, which breaks high stream-count runs. iperf3 3.16 introduced a thread-per-stream model for -P. With high stream counts the client is terminated by a signal during end-of-test teardown, after the data transfer has already completed, so no summary is emitted. This reproduces reliably at -P 128 and is currently failing the verify_sriov_interrupts_change SRIOV test on every arm64 image build. Relevant upstream fixes: 3.18 - three threading segfaults (#1801, PR #1761, PR #1752) 3.19 - additional segfault (#1807) 3.21 - end-of-test socket close race (PR #1990) and PTHREAD_CANCEL_ASYNCHRONOUS -> DEFERRED (PR #2004) Patches dropped, each verified present in the 3.21 source: CVE-2024-53580.patch upstream in 3.18 CVE-2025-54349.patch upstream in 3.19.1 CVE-2025-54350.patch upstream in 3.19.1 openssl_encrypt_buffer_size.patch upstream in 3.20 CVE-2026-71218.patch upstream in 3.21 CVE-2026-71217 (upstream PR #2039) postdates the 3.21 release and is still required. Rebased onto pristine upstream commit 494dd377, which applies cleanly to 3.21; the downstream version also carried a MAX_OMIT_TIME define that 3.21 already has. disablepg.patch is Azure Linux local and still applies.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Upgrades
iperf3in Azure Linux 3.0 from 3.17.1-5 to 3.21-1.3.0 has been on 3.17.1 since Aug 2024 under security-only servicing. That policy is correct for a stable branch, but it means upstream non-security stability fixes never land — and one of them is currently breaking our own test infrastructure.
Motivation
iperf3 3.16 replaced the single-threaded model with thread-per-stream for
-P. At high stream counts the client is terminated by a signal during end-of-test teardown, after the data transfer has already completed, so the final summary is never emitted.This is reproducing reliably at
-P 128and fails theverify_sriov_interrupts_changeSRIOV test on every arm64 image build since 2026-08-19.Observed in LISA run 734950:
Traffic was healthy at ~11.9 Gbits/sec right up to the end. Exit code
-1is paramiko's value when the SSH channel closes withexit-signalrather thanexit-status, i.e. the process was killed by a signal. No kernel oops or OOM on either node's serial console — this is a userspace crash in iperf3's own teardown path, not an SRIOV or kernel regression.Beyond the immediate breakage, the test can never reach its actual assertions (interrupt counts per IRQ, distribution across CPUs), so a genuine kernel interrupt-affinity regression would currently be invisible behind this failure.
Relevant upstream fixes:
pthread_cancelon uninitialized thread (#1801), thread recycling (PR #1761), signal handling in threads (PR #1752)PTHREAD_CANCEL_ASYNCHRONOUS→DEFERRED(PR #2004)3.21 is chosen over 3.19.1 because PR #1990 and PR #2004 are in the same failure class as the crash we are hitting.
Patch changes
Dropped — each verified present in the 3.21 source, not assumed from changelogs:
CVE-2024-53580.patchget_parametersusesiperf_cJSON_GetObjectItemType(...)type-checked accessCVE-2025-54349.patchdecrypt_rsa_messagehasOPENSSL_malloc(output_buffer_len + 1)andint ret = 0CVE-2025-54350.patchopenssl_encrypt_buffer_size.patchencrypt_rsa_messagesetsencryptedtext_len = output_buffer_lenbeforeEVP_PKEY_encryptCVE-2026-71218.patchJSON_readguardsrc == sizeof(nsize)andhsize > 0 && (max_size == 0 || hsize <= max_size)Retained:
CVE-2026-71217.patch— upstream PR [main] Adding a missingreturninpkggragh.go. #2039 merged 2026-05-20, which postdates the 3.21 release (2026-04-09), so it is still required. Rebased onto pristine upstream commit494dd377, which applies cleanly to 3.21. The previous downstream version additionally carried aMAX_OMIT_TIMEdefine iniperf.hthat 3.21 already has; only theiperf_api.cvalue-range checks are still needed.disablepg.patch— Azure Linux local (-pgremoval), still applies cleanly.Also updated
iperf3.signatures.json→dd289b6700d3bc33eda7fa3ce6db217d6ca42239edbcb2e7f152bf7bf5c8a5aacgmanifest.json→ version anddownloadUrlbumped to 3.21Verification done
Source0URL; sha256 recorded above matches.disablepg, thenCVE-2026-71217) against a pristine 3.21 extraction — both apply cleanly.iperf3_profile_CFLAGS = -g(no-pg), and theget_parametersvalue-range checks are present.Not yet done — why this is a draft
make build-packages/ container build on x86_64 and aarch64.%checkrunsmake check— should be confirmed green on the new version.verify_sriov_interrupts_changeon an arm64 image built with this package to confirm the SRIOV test recovers.libiperfABI.multiperfwas checked and does not link against iperf3, and the only other consumer is this package's own-devel, but worth a second pair of eyes.3.17.1-6. I went with the rebase since it also picks up PR [main] [core] Upgrade python-netaddr to 0.8.0 #1990/[main] [core] gcc: Add libasan, liblsan, libtsan, libubsan provides #2004, but I'll switch if the branch policy says otherwise./cc @microsoft/azurelinux-maintainers