Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mbedtls-2 for openSUSE:Factory 
checked in at 2025-07-14 10:52:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mbedtls-2 (Old)
 and      /work/SRC/openSUSE:Factory/.mbedtls-2.new.7373 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mbedtls-2"

Mon Jul 14 10:52:40 2025 rev:11 rq:1292596 version:2.28.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/mbedtls-2/mbedtls-2.changes      2025-05-09 
18:51:42.293940392 +0200
+++ /work/SRC/openSUSE:Factory/.mbedtls-2.new.7373/mbedtls-2.changes    
2025-07-14 10:58:25.253342791 +0200
@@ -1,0 +2,6 @@
+Fri Jul 11 14:27:38 UTC 2025 - Lucas Mulling <lucas.mull...@suse.com>
+
+- Fix build with gcc15:
+  * Add patch mbedtls-fix-build-with-gcc-15.patch
+
+-------------------------------------------------------------------

New:
----
  mbedtls-fix-build-with-gcc-15.patch

----------(New B)----------
  New:- Fix build with gcc15:
  * Add patch mbedtls-fix-build-with-gcc-15.patch
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mbedtls-2.spec ++++++
--- /var/tmp/diff_new_pack.uWPUNg/_old  2025-07-14 10:58:25.789365012 +0200
+++ /var/tmp/diff_new_pack.uWPUNg/_new  2025-07-14 10:58:25.789365012 +0200
@@ -35,6 +35,8 @@
 BuildRequires:  pkgconfig(libpkcs11-helper-1)
 BuildRequires:  pkgconfig(zlib)
 %{?suse_build_hwcaps_libs}
+# PATCH-FIX-UPSTREAM: Fix build with gcc15
+Patch0:         mbedtls-fix-build-with-gcc-15.patch
 
 %description
 mbedtls implements the SSL3, TLS 1.0, 1.1 and 1.2 protocols. It

++++++ mbedtls-fix-build-with-gcc-15.patch ++++++
>From 2e1399f1e1ed6fa1072cf9584f5771322b0d001b Mon Sep 17 00:00:00 2001
From: Felix Conway <felix.con...@arm.com>
Date: Wed, 11 Jun 2025 16:04:30 +0100
Subject: [PATCH 1/4] Add __attribute__ ((nonstring)) to remove
 unterminated-string-initialization warning

Signed-off-by: Felix Conway <felix.con...@arm.com>
---
 library/ssl_tls13_keys.c                                   | 3 ++-
 library/ssl_tls13_keys.h                                   | 3 ++-
 tests/suites/test_suite_psa_crypto.function                | 6 ++++--
 .../suites/test_suite_psa_crypto_slot_management.function  | 7 ++++---
 tests/suites/test_suite_ssl_decrypt.function               | 3 ++-
 5 files changed, 14 insertions(+), 8 deletions(-)

Index: mbedtls-2.28.10/library/ssl_tls13_keys.c
===================================================================
--- mbedtls-2.28.10.orig/library/ssl_tls13_keys.c
+++ mbedtls-2.28.10/library/ssl_tls13_keys.c
@@ -67,7 +67,7 @@ struct mbedtls_ssl_tls1_3_labels_struct
  *         the HkdfLabel structure on success.
  */
 
-static const char tls1_3_label_prefix[6] = "tls13 ";
+static const char tls1_3_label_prefix[6] MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING 
= "tls13 ";
 
 #define SSL_TLS1_3_KEY_SCHEDULE_HKDF_LABEL_LEN(label_len, context_len) \
     (2                     /* expansion length           */ \
Index: mbedtls-2.28.10/library/ssl_tls13_keys.h
===================================================================
--- mbedtls-2.28.10.orig/library/ssl_tls13_keys.h
+++ mbedtls-2.28.10/library/ssl_tls13_keys.h
@@ -7,6 +7,8 @@
 #if !defined(MBEDTLS_SSL_TLS1_3_KEYS_H)
 #define MBEDTLS_SSL_TLS1_3_KEYS_H
 
+#include "common.h"
+
 /* This requires MBEDTLS_SSL_TLS1_3_LABEL( idx, name, string ) to be defined at
  * the point of use. See e.g. the definition of mbedtls_ssl_tls1_3_labels_union
  * below. */
@@ -30,8 +32,9 @@
     MBEDTLS_SSL_TLS1_3_LABEL(res_binder, "res binder") \
     MBEDTLS_SSL_TLS1_3_LABEL(derived, "derived")
 
+/* We need to tell the compiler that we meant to leave out the null character. 
*/
 #define MBEDTLS_SSL_TLS1_3_LABEL(name, string)       \
-    const unsigned char name    [sizeof(string) - 1];
+    const unsigned char name    [sizeof(string) - 1] 
MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING;
 
 union mbedtls_ssl_tls1_3_labels_union {
     MBEDTLS_SSL_TLS1_3_LABEL_LIST
Index: mbedtls-2.28.10/tests/suites/test_suite_psa_crypto.function
===================================================================
--- mbedtls-2.28.10.orig/tests/suites/test_suite_psa_crypto.function
+++ mbedtls-2.28.10/tests/suites/test_suite_psa_crypto.function
@@ -1990,7 +1990,9 @@ void mac_setup(int key_type_arg,
     psa_mac_operation_t operation = PSA_MAC_OPERATION_INIT;
     psa_status_t status = PSA_ERROR_GENERIC_ERROR;
 #if defined(KNOWN_SUPPORTED_MAC_ALG)
-    const uint8_t smoke_test_key_data[16] = "kkkkkkkkkkkkkkkk";
+    /* We need to tell the compiler that we meant to leave out the null 
character. */
+    const uint8_t smoke_test_key_data[16] 
MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING =
+        "kkkkkkkkkkkkkkkk";
 #endif
 
     PSA_ASSERT(psa_crypto_init());
@@ -2381,7 +2383,9 @@ void cipher_setup(int key_type_arg,
     psa_cipher_operation_t operation = PSA_CIPHER_OPERATION_INIT;
     psa_status_t status;
 #if defined(KNOWN_SUPPORTED_CIPHER_ALG)
-    const uint8_t smoke_test_key_data[16] = "kkkkkkkkkkkkkkkk";
+    /* We need to tell the compiler that we meant to leave out the null 
character. */
+    const uint8_t smoke_test_key_data[16] 
MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING =
+        "kkkkkkkkkkkkkkkk";
 #endif
 
     PSA_ASSERT(psa_crypto_init());
Index: 
mbedtls-2.28.10/tests/suites/test_suite_psa_crypto_slot_management.function
===================================================================
--- 
mbedtls-2.28.10.orig/tests/suites/test_suite_psa_crypto_slot_management.function
+++ mbedtls-2.28.10/tests/suites/test_suite_psa_crypto_slot_management.function
@@ -1,6 +1,7 @@
 /* BEGIN_HEADER */
 #include <stdint.h>
 
+#include "common.h"
 #include "psa_crypto_slot_management.h"
 #include "psa_crypto_storage.h"
 
@@ -358,8 +359,9 @@ void create_existent(int lifetime_arg, i
     mbedtls_svc_key_id_t returned_id = MBEDTLS_SVC_KEY_ID_INIT;
     psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_key_type_t type1 = PSA_KEY_TYPE_RAW_DATA;
-    const uint8_t material1[5] = "a key";
-    const uint8_t material2[5] = "b key";
+    /* We need to tell the compiler that we meant to leave out the null 
character. */
+    const uint8_t material1[5] MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING = "a key";
+    const uint8_t material2[5] MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING = "b key";
     size_t bits1 = PSA_BYTES_TO_BITS(sizeof(material1));
     uint8_t reexported[sizeof(material1)];
     size_t reexported_length;
@@ -728,7 +730,7 @@ void invalid_handle(int handle_construct
     psa_key_id_t key_id;
     psa_status_t close_status = close_status_arg;
     psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
-    uint8_t material[1] = "a";
+    uint8_t material[1] = { 'a' };
 
     PSA_ASSERT(psa_crypto_init());
 
Index: mbedtls-2.28.10/tests/suites/test_suite_ssl_decrypt.function
===================================================================
--- mbedtls-2.28.10.orig/tests/suites/test_suite_ssl_decrypt.function
+++ mbedtls-2.28.10/tests/suites/test_suite_ssl_decrypt.function
@@ -36,7 +36,7 @@ void ssl_decrypt_stream(int cipher_type,
         .cid = { 0 },
 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
     };
-    const char sample_plaintext[3] = "ABC";
+    const char sample_plaintext[3] MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING = 
"ABC";
     mbedtls_cipher_context_t cipher;
     mbedtls_cipher_init(&cipher);
     mbedtls_ssl_context ssl;
Index: mbedtls-2.28.10/library/common.h
===================================================================
--- mbedtls-2.28.10.orig/library/common.h
+++ mbedtls-2.28.10/library/common.h
@@ -378,4 +378,20 @@ static inline const unsigned char *mbedt
 #    define MBEDTLS_MAYBE_UNUSED
 #endif
 
+/* GCC >= 15 has a warning 'unterminated-string-initialization' which 
complains if you initialize
+ * a string into an array without space for a terminating NULL character. In 
some places in the
+ * codebase this behaviour is intended, so we add the macro 
MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING
+ * to suppress the warning in these places.
+ */
+#if defined(__has_attribute)
+#if __has_attribute(nonstring)
+#define MBEDTLS_HAS_ATTRIBUTE_NONSTRING
+#endif /* __has_attribute(nonstring) */
+#endif /* __has_attribute */
+#if defined(MBEDTLS_HAS_ATTRIBUTE_NONSTRING)
+#define MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING __attribute__((nonstring))
+#else
+#define MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING
+#endif /* MBEDTLS_HAS_ATTRIBUTE_NONSTRING */
+
 #endif /* MBEDTLS_LIBRARY_COMMON_H */
Index: mbedtls-2.28.10/ChangeLog.d/unterminated-string-initialization.txt
===================================================================
--- /dev/null
+++ mbedtls-2.28.10/ChangeLog.d/unterminated-string-initialization.txt
@@ -0,0 +1,3 @@
+Bugfix
+   * Silence spurious -Wunterminated-string-initialization warnings introduced
+     by GCC 15. Fixes #9944.
Index: mbedtls-2.28.10/tests/src/psa_exercise_key.c
===================================================================
--- mbedtls-2.28.10.orig/tests/src/psa_exercise_key.c
+++ mbedtls-2.28.10/tests/src/psa_exercise_key.c
@@ -7,6 +7,8 @@
  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  */
 
+#include "common.h"
+
 #include <test/helpers.h>
 #include <test/macros.h>
 #include <test/psa_exercise_key.h>
@@ -150,7 +152,7 @@ static int exercise_cipher_key(mbedtls_s
     psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_key_type_t key_type;
     const unsigned char plaintext[16] = "Hello, world...";
-    unsigned char ciphertext[32] = "(wabblewebblewibblewobblewubble)";
+    unsigned char ciphertext[32] MBEDTLS_ATTRIBUTE_UNTERMINATED_STRING = 
"(wabblewebblewibblewobblewubble)";
     size_t ciphertext_length = sizeof(ciphertext);
     unsigned char decrypted[sizeof(ciphertext)];
     size_t part_length;
Index: mbedtls-2.28.10/ChangeLog.d/union-initialization.txt
===================================================================
--- /dev/null
+++ mbedtls-2.28.10/ChangeLog.d/union-initialization.txt
@@ -0,0 +1,15 @@
+Bugfix
+   * Fix failures of PSA multipart or interruptible operations when the
+     library or the application is built with a compiler where
+     "union foo x = {0}" does not initialize non-default members of the
+     union, such as GCC 15 and some versions of Clang 18. This affected MAC
+     multipart operations, MAC-based key derivation operations, interruptible
+     signature, interruptible verification, and potentially other operations
+     when using third-party drivers. This also affected one-shot MAC
+     operations using the built-in implementation. Fixes #9814.
+   * On entry to PSA driver entry points that set up a multipart operation
+     ("xxx_setup"), the operation object is supposed to be all-bits-zero.
+     This was sometimes not the case when an operation object is reused,
+     or with compilers where "union foo x = {0}" does not initialize
+     non-default members of the union. The PSA core now ensures that this
+     guarantee is met in all cases. Fixes #9975.
Index: mbedtls-2.28.10/library/psa_crypto.c
===================================================================
--- mbedtls-2.28.10.orig/library/psa_crypto.c
+++ mbedtls-2.28.10/library/psa_crypto.c
@@ -2343,8 +2343,11 @@ psa_status_t psa_hash_setup(psa_hash_ope
         goto exit;
     }
 
-    /* Ensure all of the context is zeroized, since PSA_HASH_OPERATION_INIT 
only
-     * directly zeroes the int-sized dummy member of the context union. */
+    /* Make sure the driver-dependent part of the operation is zeroed.
+     * This is a guarantee we make to drivers. Initializing the operation
+     * does not necessarily take care of it, since the context is a
+     * union and initializing a union does not necessarily initialize
+     * all of its members. */
     memset(&operation->ctx, 0, sizeof(operation->ctx));
 
     status = psa_driver_wrapper_hash_setup(operation, alg);
@@ -2539,6 +2542,13 @@ psa_status_t psa_hash_clone(const psa_ha
         return PSA_ERROR_BAD_STATE;
     }
 
+    /* Make sure the driver-dependent part of the operation is zeroed.
+     * This is a guarantee we make to drivers. Initializing the operation
+     * does not necessarily take care of it, since the context is a
+     * union and initializing a union does not necessarily initialize
+     * all of its members. */
+    memset(&target_operation->ctx, 0, sizeof(target_operation->ctx));
+
     psa_status_t status = psa_driver_wrapper_hash_clone(source_operation,
                                                         target_operation);
     if (status != PSA_SUCCESS) {
@@ -2637,6 +2647,13 @@ static psa_status_t psa_mac_setup(psa_ma
         goto exit;
     }
 
+    /* Make sure the driver-dependent part of the operation is zeroed.
+     * This is a guarantee we make to drivers. Initializing the operation
+     * does not necessarily take care of it, since the context is a
+     * union and initializing a union does not necessarily initialize
+     * all of its members. */
+    memset(&operation->ctx, 0, sizeof(operation->ctx));
+
     status = psa_get_and_lock_key_slot_with_policy(
         key,
         &slot,
@@ -3750,6 +3767,14 @@ static psa_status_t psa_cipher_setup(psa
         .core = slot->attr
     };
 
+
+    /* Make sure the driver-dependent part of the operation is zeroed.
+     * This is a guarantee we make to drivers. Initializing the operation
+     * does not necessarily take care of it, since the context is a
+     * union and initializing a union does not necessarily initialize
+     * all of its members. */
+    memset(&operation->ctx, 0, sizeof(operation->ctx));
+
     /* Try doing the operation through a driver before using software 
fallback. */
     if (cipher_operation == MBEDTLS_ENCRYPT) {
         status = psa_driver_wrapper_cipher_encrypt_setup(operation,
@@ -4283,6 +4308,17 @@ exit:
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) || \
     defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \
     defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS)
+
+/** Internal helper to set up an HMAC operation with a key passed directly.
+ *
+ * \param[in,out] operation     A MAC operation object. It does not need to
+ *                              be initialized.
+ * \param hash_alg              The hash algorithm used for HMAC.
+ * \param hmac_key              The HMAC key.
+ * \param hmac_key_length       Length of \p hmac_key in bytes.
+ *
+ * \return A PSA status code.
+ */
 static psa_status_t psa_key_derivation_start_hmac(
     psa_mac_operation_t *operation,
     psa_algorithm_t hash_alg,
@@ -4295,6 +4331,14 @@ static psa_status_t psa_key_derivation_s
     psa_set_key_bits(&attributes, PSA_BYTES_TO_BITS(hmac_key_length));
     psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_SIGN_HASH);
 
+    /* Make sure the whole the operation is zeroed.
+     * It isn't enough to require the caller to initialize operation to
+     * PSA_MAC_OPERATION_INIT, since one field is a union and initializing
+     * a union does not necessarily initialize all of its members.
+     * psa_mac_setup() would handle PSA_MAC_OPERATION_INIT, but here we
+     * bypass it and call lower-level functions directly. */
+    memset(operation, 0, sizeof(*operation));
+
     operation->is_sign = 1;
     operation->mac_size = PSA_HASH_LENGTH(hash_alg);
 
@@ -4491,7 +4535,7 @@ static psa_status_t psa_key_derivation_t
 {
     psa_algorithm_t hash_alg = PSA_ALG_HKDF_GET_HASH(alg);
     uint8_t hash_length = PSA_HASH_LENGTH(hash_alg);
-    psa_mac_operation_t hmac = PSA_MAC_OPERATION_INIT;
+    psa_mac_operation_t hmac;
     size_t hmac_output_length;
     psa_status_t status, cleanup_status;
 
Index: mbedtls-2.28.10/library/psa_crypto_mac.c
===================================================================
--- mbedtls-2.28.10.orig/library/psa_crypto_mac.c
+++ mbedtls-2.28.10/library/psa_crypto_mac.c
@@ -464,6 +464,15 @@ psa_status_t mbedtls_psa_mac_compute(
 {
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
     mbedtls_psa_mac_operation_t operation = MBEDTLS_PSA_MAC_OPERATION_INIT;
+    /* Make sure the whole operation is zeroed.
+     * PSA_MAC_OPERATION_INIT does not necessarily do it fully,
+     * since one field is a union and initializing a union does not
+     * necessarily initialize all of its members.
+     * In multipart operations, this is done in the API functions,
+     * before driver dispatch, since it needs to be done before calling
+     * the driver entry point. Here, we bypass the multipart API,
+     * so it's our job. */
+    memset(&operation, 0, sizeof(operation));
 
     status = psa_mac_setup(&operation,
                            attributes, key_buffer, key_buffer_size,

Reply via email to