On Tue, Mar 05, 2019 at 11:39:02PM +0100, Holger Mikolon wrote:
> Hi,
> 
> while debugging an unusual openssl use case, I tried reading and
> understanding libcrypto x509 code and came across the comparison
> of serialNumbers (of type ASN1_INTEGER*) with a string comparison
> function. Below patch fixes the comparison to use ASN1_INTEGER_cmp.
> 
> The man page (ASN1_STRING_cmp(3)) contains the following unambiguous
> advice:
> 
>   "These functions should not be used to examine or modify ASN1_INTEGER
>   or ASN1_ENUMERATED types: the relevant INTEGER or ENUMERATED utility
>   functions should be used instead."
> 
> Revision 1.26 introduced the use of ASN1_STRING_cmp for the serialNumber
> with the commit message "Expand obsolete M_ASN1.*(cmp|dup|print|set)
> macros ..." So it seems to have been an intentional change, even though
> it contradicts the man page.
> 
> Thoughts?

The change definitely was intentional, as it was a strictly mechanical
macro expansion.

While your patch is correct, I think it is incomplete.  If you grep for
serialNumber, you'll find a few more STRING vs. INTEGER mixups. I would
prefer to address them all at the same time.

If you're up for it, it would probably be a good idea to look at the
changes introduced by the commit you mentioned and see what else looks
suspicious and needs fixing.

> 
> Best regards
> Holger
> 
> 
> 
> Index: x509_cmp.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/x509/x509_cmp.c,v
> retrieving revision 1.34
> diff -u -p -u -r1.34 x509_cmp.c
> --- x509_cmp.c        24 Aug 2018 19:59:32 -0000      1.34
> +++ x509_cmp.c        5 Mar 2019 22:19:34 -0000
> @@ -76,7 +76,7 @@ X509_issuer_and_serial_cmp(const X509 *a
>  
>       ai = a->cert_info;
>       bi = b->cert_info;
> -     i = ASN1_STRING_cmp(ai->serialNumber, bi->serialNumber);
> +     i = ASN1_INTEGER_cmp(ai->serialNumber, bi->serialNumber);
>       if (i)
>               return (i);
>       return (X509_NAME_cmp(ai->issuer, bi->issuer));
> 

Reply via email to