]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
nettle: avoid potential memleak with GMP older than 6.2.0
authorDaiki Ueno <ueno@gnu.org>
Tue, 26 Mar 2024 11:18:08 +0000 (20:18 +0900)
committerDaiki Ueno <ueno@gnu.org>
Tue, 26 Mar 2024 11:18:08 +0000 (20:18 +0900)
As GMP 6.1.0 or ealier eagerly allocates memory at mpz_init_set_str,
if the operand is already initialized, it will cause a small leak.

See also: https://gmplib.org/repo/gmp/rev/f049e75390fc

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/nettle/int/ecdsa-compute-k.c

index 4e25235c40bdb4970a7a5e1a5adb44f7cad1612a..fc01eaf0c9d0d68558254f723ef234f3f9d0424c 100644 (file)
@@ -34,39 +34,39 @@ int _gnutls_ecc_curve_to_dsa_q(mpz_t q, gnutls_ecc_curve_t curve)
        switch (curve) {
 #ifdef ENABLE_NON_SUITEB_CURVES
        case GNUTLS_ECC_CURVE_SECP192R1:
-               mpz_init_set_str(q,
-                                "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836"
-                                "146BC9B1B4D22831",
-                                16);
+               mpz_set_str(q,
+                           "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836"
+                           "146BC9B1B4D22831",
+                           16);
                return 0;
        case GNUTLS_ECC_CURVE_SECP224R1:
-               mpz_init_set_str(q,
-                                "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2"
-                                "E0B8F03E13DD29455C5C2A3D",
-                                16);
+               mpz_set_str(q,
+                           "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2"
+                           "E0B8F03E13DD29455C5C2A3D",
+                           16);
                return 0;
 #endif
        case GNUTLS_ECC_CURVE_SECP256R1:
-               mpz_init_set_str(q,
-                                "FFFFFFFF00000000FFFFFFFFFFFFFFFF"
-                                "BCE6FAADA7179E84F3B9CAC2FC632551",
-                                16);
+               mpz_set_str(q,
+                           "FFFFFFFF00000000FFFFFFFFFFFFFFFF"
+                           "BCE6FAADA7179E84F3B9CAC2FC632551",
+                           16);
                return 0;
        case GNUTLS_ECC_CURVE_SECP384R1:
-               mpz_init_set_str(q,
-                                "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-                                "FFFFFFFFFFFFFFFFC7634D81F4372DDF"
-                                "581A0DB248B0A77AECEC196ACCC52973",
-                                16);
+               mpz_set_str(q,
+                           "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+                           "FFFFFFFFFFFFFFFFC7634D81F4372DDF"
+                           "581A0DB248B0A77AECEC196ACCC52973",
+                           16);
                return 0;
        case GNUTLS_ECC_CURVE_SECP521R1:
-               mpz_init_set_str(q,
-                                "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-                                "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-                                "FFA51868783BF2F966B7FCC0148F709A"
-                                "5D03BB5C9B8899C47AEBB6FB71E91386"
-                                "409",
-                                16);
+               mpz_set_str(q,
+                           "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+                           "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+                           "FFA51868783BF2F966B7FCC0148F709A"
+                           "5D03BB5C9B8899C47AEBB6FB71E91386"
+                           "409",
+                           16);
                return 0;
        default:
                return gnutls_assert_val(