]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: acme: avoid a possible crash on error paths master
authorWilly Tarreau <w@1wt.eu>
Fri, 7 Nov 2025 21:27:25 +0000 (22:27 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 7 Nov 2025 21:27:25 +0000 (22:27 +0100)
In acme_EVP_PKEY_gen(), an error message is printed if *errmsg is set,
however, since commit 546c67d13 ("MINOR: acme: generate a temporary key
pair"), errmsg is passed as NULL in at least one occurrence, leading
the compiler to issue a NULL deref warning at -O3. And indeed, if the
errors are encountered, a crash will occur. No backport is needed.

src/acme.c

index ac8a76dc26904f8f67a185528397b661a436708f..7f7a4c6494273bca2bc69e23e2d3abe8da347811 100644 (file)
@@ -2584,29 +2584,29 @@ static EVP_PKEY *acme_EVP_PKEY_gen(int keytype, int curves, int bits, char **err
        EVP_PKEY *pkey = NULL;
 
        if ((pkey_ctx = EVP_PKEY_CTX_new_id(keytype, NULL)) == NULL) {
-               memprintf(errmsg, "%sCan't generate a private key.\n", *errmsg ? *errmsg : "");
+               memprintf(errmsg, "%sCan't generate a private key.\n", errmsg && *errmsg ? *errmsg : "");
                goto err;
        }
 
        if (EVP_PKEY_keygen_init(pkey_ctx) <= 0) {
-               memprintf(errmsg, "%sCan't generate a private key.\n", *errmsg ? *errmsg : "");
+               memprintf(errmsg, "%sCan't generate a private key.\n", errmsg && *errmsg ? *errmsg : "");
                goto err;
        }
 
        if (keytype == EVP_PKEY_EC) {
                if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pkey_ctx, curves) <= 0) {
-                       memprintf(errmsg, "%sCan't set the curves on the new private key.\n", *errmsg ? *errmsg : "");
+                       memprintf(errmsg, "%sCan't set the curves on the new private key.\n", errmsg && *errmsg ? *errmsg : "");
                        goto err;
                }
        } else if (keytype == EVP_PKEY_RSA) {
                if (EVP_PKEY_CTX_set_rsa_keygen_bits(pkey_ctx, bits) <= 0) {
-                       memprintf(errmsg, "%sCan't set the bits on the new private key.\n", *errmsg ? *errmsg : "");
+                       memprintf(errmsg, "%sCan't set the bits on the new private key.\n", errmsg && *errmsg ? *errmsg : "");
                        goto err;
                }
        }
 
        if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) {
-               memprintf(errmsg, "%sCan't generate a private key.\n", *errmsg ? *errmsg : "");
+               memprintf(errmsg, "%sCan't generate a private key.\n", errmsg && *errmsg ? *errmsg : "");
                goto err;
        }