I had checked this by portable build and all regresses passed.
I'm ok with this diff.


On Thu, Mar 26, 2020 at 09:28:01PM +0300, [email protected] wrote:
> From: Dmitry Baryshkov <[email protected]>
> 
> Add few more error reports to help debugging.
> 
> Sponsored by ROSA Linux.
> 
> Signed-off-by: Dmitry Baryshkov <[email protected]>
> ---
>  src/lib/libcrypto/gost/gostr341001_ameth.c | 20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/src/lib/libcrypto/gost/gostr341001_ameth.c 
> b/src/lib/libcrypto/gost/gostr341001_ameth.c
> index 16295996dce7..be621d0185dd 100644
> --- a/src/lib/libcrypto/gost/gostr341001_ameth.c
> +++ b/src/lib/libcrypto/gost/gostr341001_ameth.c
> @@ -96,15 +96,19 @@ decode_gost01_algor_params(EVP_PKEY *pkey, const unsigned 
> char **p, int len)
>       ec = pkey->pkey.gost;
>       if (ec == NULL) {
>               ec = GOST_KEY_new();
> -             if (ec == NULL)
> +             if (ec == NULL) {
> +                     GOSTerror(ERR_R_MALLOC_FAILURE);
>                       return 0;
> +             }
>               if (EVP_PKEY_assign_GOST(pkey, ec) == 0)
>                       return 0;
>       }
>  
>       group = EC_GROUP_new_by_curve_name(param_nid);
> -     if (group == NULL)
> +     if (group == NULL) {
> +             ECerror(EC_R_EC_GROUP_NEW_BY_NAME_FAILURE);
>               return 0;
> +     }
>       EC_GROUP_set_asn1_flag(group, OPENSSL_EC_NAMED_CURVE);
>       if (GOST_KEY_set_group(ec, group) == 0) {
>               EC_GROUP_free(group);
> @@ -207,8 +211,10 @@ pub_decode_gost01(EVP_PKEY *pk, X509_PUBKEY *pub)
>               return 0;
>       }
>       p = pval->data;
> -     if (decode_gost01_algor_params(pk, &p, pval->length) == 0)
> +     if (decode_gost01_algor_params(pk, &p, pval->length) == 0) {
> +             GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT);
>               return 0;
> +     }
>  
>       octet = d2i_ASN1_OCTET_STRING(NULL, &pubkey_buf, pub_len);
>       if (octet == NULL) {
> @@ -407,8 +413,10 @@ priv_decode_gost01(EVP_PKEY *pk, const 
> PKCS8_PRIV_KEY_INFO *p8inf)
>       int ptype = V_ASN1_UNDEF;
>       ASN1_STRING *pval = NULL;
>  
> -     if (PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf) == 0)
> +     if (PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf) == 
> 0) {
> +             GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT);
>               return 0;
> +     }
>       (void)EVP_PKEY_assign_GOST(pk, NULL);
>       X509_ALGOR_get0(NULL, &ptype, (const void **)&pval, palg);
>       if (ptype != V_ASN1_SEQUENCE) {
> @@ -416,8 +424,10 @@ priv_decode_gost01(EVP_PKEY *pk, const 
> PKCS8_PRIV_KEY_INFO *p8inf)
>               return 0;
>       }
>       p = pval->data;
> -     if (decode_gost01_algor_params(pk, &p, pval->length) == 0)
> +     if (decode_gost01_algor_params(pk, &p, pval->length) == 0) {
> +             GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT);
>               return 0;
> +     }
>       p = pkey_buf;
>       if (V_ASN1_OCTET_STRING == *p) {
>               /* New format - Little endian octet string */
> -- 
> 2.25.1
> 

Reply via email to