Call of memcmp with null pointers in obj_cmp()
authorHanno Böck <hanno@hboeck.de>
Mon, 11 May 2015 10:33:37 +0000 (11:33 +0100)
committerMatt Caswell <matt@openssl.org>
Wed, 13 May 2015 14:28:48 +0000 (15:28 +0100)
commiteba8bf485a81541ad25a685f13f00a862cc371a8
tree542c39875d05b99a6e9bce1d952922e4eb8b9c42
parent464774d75f91ab84772de71743e3c8c0db9a96a6
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: Matt Caswell <matt@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit 2b8dc08b74fc3c6d4c2fc855cc23bac691d985be)
crypto/objects/obj_dat.c