diff mbox series

[meta-oe,master] iperf3: Fix CVE-2025-54349

Message ID 20250922040301.2149568-1-nitin.wankhade333@gmail.com
State Under Review
Headers show
Series [meta-oe,master] iperf3: Fix CVE-2025-54349 | expand

Commit Message

Nitin Wankhade Sept. 22, 2025, 4:03 a.m. UTC
This commit fix heap overflow for iperf3 package

Reference: https://github.com/esnet/iperf/commit/4e5313bab0b9b3fe03513ab54f722c8a3e4b7bdf

Signed-off-by: Nitin Wankhade <nitin.wankhade333@gmail.com>
---
 .../iperf3/iperf3/CVE-2025-54349.patch        | 80 +++++++++++++++++++
 .../recipes-benchmark/iperf3/iperf3_3.18.bb   |  3 +-
 2 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch

Comments

Khem Raj Sept. 22, 2025, 3:24 p.m. UTC | #1
There are two patches applied to a branch and expected to be in a
sequence. Its better to send both the patches as a single series. So
the indented order is
conveyed as well.

On Mon, Sep 22, 2025 at 1:53 AM Nitin Wankhade via
lists.openembedded.org
<nitin.wankhade333=gmail.com@lists.openembedded.org> wrote:
>
> This commit fix heap overflow for iperf3 package
>
> Reference: https://github.com/esnet/iperf/commit/4e5313bab0b9b3fe03513ab54f722c8a3e4b7bdf
>
> Signed-off-by: Nitin Wankhade <nitin.wankhade333@gmail.com>
> ---
>  .../iperf3/iperf3/CVE-2025-54349.patch        | 80 +++++++++++++++++++
>  .../recipes-benchmark/iperf3/iperf3_3.18.bb   |  3 +-
>  2 files changed, 82 insertions(+), 1 deletion(-)
>  create mode 100644 meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch
>
> diff --git a/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch b/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch
> new file mode 100644
> index 0000000000..61e1888685
> --- /dev/null
> +++ b/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch
> @@ -0,0 +1,80 @@
> +Subject: [PATCH] iperf3: Fix CVE-2025-54349
> +CVE: CVE-2025-54349
> +Upstream-Status: Backport [https://github.com/esnet/iperf/commit/4e5313bab0b9b3fe03513ab54f722c8a3e4b7bdf]
> +Signed-off-by: Nitin Wankhade <nitin.wankhade333@gmail.com>
> +---
> +diff --git a/iperf_auth.c b/iperf_auth.c
> +index 72e85fc..91c4133 100644
> +--- a/src/iperf_auth.c
> ++++ b/src/iperf_auth.c
> +@@ -288,6 +288,7 @@ int encrypt_rsa_message(const char *plaintext, EVP_PKEY *public_key, unsigned ch
> + }
> +
> + int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedtext_len, EVP_PKEY *private_key, unsigned char **plaintext, int use_pkcs1_padding) {
> ++    int ret =0;
> + #if OPENSSL_VERSION_MAJOR >= 3
> +     EVP_PKEY_CTX *ctx;
> + #else
> +@@ -310,7 +311,8 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
> +     keysize = RSA_size(rsa);
> + #endif
> +     rsa_buffer  = OPENSSL_malloc(keysize * 2);
> +-    *plaintext = (unsigned char*)OPENSSL_malloc(keysize);
> ++    // Note: +1 for NULL
> ++    *plaintext = (unsigned char*)OPENSSL_malloc(keysize + 1);
> +
> +     BIO *bioBuff   = BIO_new_mem_buf((void*)encryptedtext, encryptedtext_len);
> +     rsa_buffer_len = BIO_read(bioBuff, rsa_buffer, keysize * 2);
> +@@ -322,11 +324,12 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
> + #if OPENSSL_VERSION_MAJOR >= 3
> +     plaintext_len = keysize;
> +     EVP_PKEY_decrypt_init(ctx);
> +-    int ret = EVP_PKEY_CTX_set_rsa_padding(ctx, padding);
> ++
> ++    ret = EVP_PKEY_CTX_set_rsa_padding(ctx, padding);
> +     if (ret < 0){
> +         goto errreturn;
> +     }
> +-    EVP_PKEY_decrypt(ctx, *plaintext, &plaintext_len, rsa_buffer, rsa_buffer_len);
> ++    ret = EVP_PKEY_decrypt(ctx, *plaintext, &plaintext_len, rsa_buffer, rsa_buffer_len);
> +     EVP_PKEY_CTX_free(ctx);
> + #else
> +     plaintext_len = RSA_private_decrypt(rsa_buffer_len, rsa_buffer, *plaintext, rsa, padding);
> +@@ -337,7 +340,7 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
> +     BIO_free(bioBuff);
> +
> +     /* Treat a decryption error as an empty string. */
> +-    if (plaintext_len < 0) {
> ++    if (plaintext_len <= 0) {
> +         plaintext_len = 0;
> +     }
> +
> +@@ -386,7 +389,7 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
> +     int plaintext_len;
> +     plaintext_len = decrypt_rsa_message(encrypted_b64, encrypted_len_b64, private_key, &plaintext, use_pkcs1_padding);
> +     free(encrypted_b64);
> +-    if (plaintext_len < 0) {
> ++    if (plaintext_len <= 0) {
> +         return -1;
> +     }
> +     plaintext[plaintext_len] = '\0';
> +@@ -394,16 +397,19 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
> +     char *s_username, *s_password;
> +     s_username = (char *) calloc(plaintext_len, sizeof(char));
> +     if (s_username == NULL) {
> ++      OPENSSL_free(plaintext);
> +       return -1;
> +     }
> +     s_password = (char *) calloc(plaintext_len, sizeof(char));
> +     if (s_password == NULL) {
> ++      OPENSSL_free(plaintext);
> +       free(s_username);
> +       return -1;
> +     }
> +
> +     int rc = sscanf((char *) plaintext, auth_text_format, s_username, s_password, &utc_seconds);
> +     if (rc != 3) {
> ++      OPENSSL_free(plaintext);
> +       free(s_password);
> +       free(s_username);
> +       return -1;
> diff --git a/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb b/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
> index 08f29937c0..265611e533 100644
> --- a/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
> +++ b/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
> @@ -16,7 +16,8 @@ SRC_URI = "git://github.com/esnet/iperf.git;branch=master;protocol=https \
>             file://0002-Remove-pg-from-profile_CFLAGS.patch \
>             file://0001-configure.ac-check-for-CPP-prog.patch \
>             file://0001-fix-build-with-gcc-15.patch \
> -           "
> +           file://CVE-2025-54349.patch \
> +          "
>
>  SRCREV = "2a2984488d6de8f7a2d1f5938e03ca7be57e227c"
>
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#119643): https://lists.openembedded.org/g/openembedded-devel/message/119643
> Mute This Topic: https://lists.openembedded.org/mt/115372270/1997914
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch b/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch
new file mode 100644
index 0000000000..61e1888685
--- /dev/null
+++ b/meta-oe/recipes-benchmark/iperf3/iperf3/CVE-2025-54349.patch
@@ -0,0 +1,80 @@ 
+Subject: [PATCH] iperf3: Fix CVE-2025-54349
+CVE: CVE-2025-54349
+Upstream-Status: Backport [https://github.com/esnet/iperf/commit/4e5313bab0b9b3fe03513ab54f722c8a3e4b7bdf]
+Signed-off-by: Nitin Wankhade <nitin.wankhade333@gmail.com>
+---
+diff --git a/iperf_auth.c b/iperf_auth.c
+index 72e85fc..91c4133 100644
+--- a/src/iperf_auth.c
++++ b/src/iperf_auth.c
+@@ -288,6 +288,7 @@ int encrypt_rsa_message(const char *plaintext, EVP_PKEY *public_key, unsigned ch
+ }
+ 
+ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedtext_len, EVP_PKEY *private_key, unsigned char **plaintext, int use_pkcs1_padding) {
++    int ret =0;	
+ #if OPENSSL_VERSION_MAJOR >= 3
+     EVP_PKEY_CTX *ctx;
+ #else
+@@ -310,7 +311,8 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
+     keysize = RSA_size(rsa);
+ #endif
+     rsa_buffer  = OPENSSL_malloc(keysize * 2);
+-    *plaintext = (unsigned char*)OPENSSL_malloc(keysize);
++    // Note: +1 for NULL
++    *plaintext = (unsigned char*)OPENSSL_malloc(keysize + 1);
+ 
+     BIO *bioBuff   = BIO_new_mem_buf((void*)encryptedtext, encryptedtext_len);
+     rsa_buffer_len = BIO_read(bioBuff, rsa_buffer, keysize * 2);
+@@ -322,11 +324,12 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
+ #if OPENSSL_VERSION_MAJOR >= 3
+     plaintext_len = keysize;
+     EVP_PKEY_decrypt_init(ctx);
+-    int ret = EVP_PKEY_CTX_set_rsa_padding(ctx, padding);
++
++    ret = EVP_PKEY_CTX_set_rsa_padding(ctx, padding);
+     if (ret < 0){
+         goto errreturn;
+     }
+-    EVP_PKEY_decrypt(ctx, *plaintext, &plaintext_len, rsa_buffer, rsa_buffer_len);
++    ret = EVP_PKEY_decrypt(ctx, *plaintext, &plaintext_len, rsa_buffer, rsa_buffer_len);
+     EVP_PKEY_CTX_free(ctx);
+ #else
+     plaintext_len = RSA_private_decrypt(rsa_buffer_len, rsa_buffer, *plaintext, rsa, padding);
+@@ -337,7 +340,7 @@ int decrypt_rsa_message(const unsigned char *encryptedtext, const int encryptedt
+     BIO_free(bioBuff);
+ 
+     /* Treat a decryption error as an empty string. */
+-    if (plaintext_len < 0) {
++    if (plaintext_len <= 0) {
+         plaintext_len = 0;
+     }
+ 
+@@ -386,7 +389,7 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
+     int plaintext_len;
+     plaintext_len = decrypt_rsa_message(encrypted_b64, encrypted_len_b64, private_key, &plaintext, use_pkcs1_padding);
+     free(encrypted_b64);
+-    if (plaintext_len < 0) {
++    if (plaintext_len <= 0) {
+         return -1;
+     }
+     plaintext[plaintext_len] = '\0';
+@@ -394,16 +397,19 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
+     char *s_username, *s_password;
+     s_username = (char *) calloc(plaintext_len, sizeof(char));
+     if (s_username == NULL) {
++	OPENSSL_free(plaintext);
+ 	return -1;
+     }
+     s_password = (char *) calloc(plaintext_len, sizeof(char));
+     if (s_password == NULL) {
++	OPENSSL_free(plaintext);
+ 	free(s_username);
+ 	return -1;
+     }
+ 
+     int rc = sscanf((char *) plaintext, auth_text_format, s_username, s_password, &utc_seconds);
+     if (rc != 3) {
++	OPENSSL_free(plaintext);
+ 	free(s_password);
+ 	free(s_username);
+ 	return -1;
diff --git a/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb b/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
index 08f29937c0..265611e533 100644
--- a/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
+++ b/meta-oe/recipes-benchmark/iperf3/iperf3_3.18.bb
@@ -16,7 +16,8 @@  SRC_URI = "git://github.com/esnet/iperf.git;branch=master;protocol=https \
            file://0002-Remove-pg-from-profile_CFLAGS.patch \
            file://0001-configure.ac-check-for-CPP-prog.patch \
            file://0001-fix-build-with-gcc-15.patch \
-           "
+           file://CVE-2025-54349.patch \
+          "
 
 SRCREV = "2a2984488d6de8f7a2d1f5938e03ca7be57e227c"