Commit eba8bf48 authored by Hanno Böck's avatar Hanno Böck Committed by Matt Caswell
Browse files

Call of memcmp with null pointers in obj_cmp()



The function obj_cmp() (file crypto/objects/obj_dat.c) can in some
situations call memcmp() with a null pointer and a zero length.

This is invalid behaviour. When compiling openssl with undefined
behaviour sanitizer (add -fsanitize=undefined to compile flags) this
can be seen. One example that triggers this behaviour is the pkcs7
command (but there are others, e.g. I've seen it with the timestamp
function):
apps/openssl pkcs7 -in test/testp7.pem

What happens is that obj_cmp takes objects of the type ASN1_OBJECT and
passes their ->data pointer to memcmp. Zero-sized ASN1_OBJECT
structures can have a null pointer as data.

RT#3816

Signed-off-by: default avatarMatt Caswell <matt@openssl.org>
Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
(cherry picked from commit 2b8dc08b)
parent 464774d7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -400,6 +400,8 @@ static int obj_cmp(const ASN1_OBJECT *const *ap, const unsigned int *bp)
    j = (a->length - b->length);
    if (j)
        return (j);
    if (a->length == 0)
        return 0;
    return (memcmp(a->data, b->data, a->length));
}