From: Tomas Mraz Date: Tue, 29 Jun 2021 13:46:25 +0000 (+0200) Subject: pem_read_bio_key_decoder: Avoid spurious error on unknown PEM data X-Git-Tag: openssl-3.0.0-beta2~134 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbbd425336144455f4a976acd7b890352ef7ed38;p=thirdparty%2Fopenssl.git pem_read_bio_key_decoder: Avoid spurious error on unknown PEM data Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/15949) --- diff --git a/crypto/pem/pem_pkey.c b/crypto/pem/pem_pkey.c index ca6b2a21327..4a029daa950 100644 --- a/crypto/pem/pem_pkey.c +++ b/crypto/pem/pem_pkey.c @@ -55,11 +55,24 @@ static EVP_PKEY *pem_read_bio_key_decoder(BIO *bp, EVP_PKEY **x, if (!OSSL_DECODER_CTX_set_pem_password_cb(dctx, cb, u)) goto err; + ERR_set_mark(); while (!OSSL_DECODER_from_bio(dctx, bp) || pkey == NULL) - if (BIO_eof(bp) != 0 || (newpos = BIO_tell(bp)) < 0 || newpos <= pos) + if (BIO_eof(bp) != 0 || (newpos = BIO_tell(bp)) < 0 || newpos <= pos) { + ERR_clear_last_mark(); goto err; - else + } else { + if (ERR_GET_REASON(ERR_peek_error()) == ERR_R_UNSUPPORTED) { + /* unsupported PEM data, try again */ + ERR_pop_to_mark(); + ERR_set_mark(); + } else { + /* other error, bail out */ + ERR_clear_last_mark(); + goto err; + } pos = newpos; + } + ERR_pop_to_mark(); if (!evp_keymgmt_util_has(pkey, selection)) { EVP_PKEY_free(pkey);