]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
crypto_openssl.c: fix heap-buffer-overflow found by AddressSanitizer
authorLev Stipakov <lev@openvpn.net>
Tue, 22 Jan 2019 13:41:03 +0000 (15:41 +0200)
committerGert Doering <gert@greenie.muc.de>
Tue, 22 Jan 2019 16:19:07 +0000 (17:19 +0100)
OpenSSL's version of crypto_pem_encode() uses PEM_write_bio()
function to write PEM-encoded data to BIO object. That method doesn't
add NUL termanator, unlike its mbedTLS counterpart
mbedtls_pem_write_buffer().

The code which uses PEM data treats it as a string, so missing NUL
terminator makes sanitizer to compain.

Fix by adding a NUL terminator.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <1548164463-13366-1-git-send-email-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg18141.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/crypto_openssl.c

index 9691ce0568e32ae01e9fc6d5ae1ca5c87b5db0fa..c049e52db57f13d856539c2783de139cbd1b63a5 100644 (file)
@@ -400,8 +400,9 @@ crypto_pem_encode(const char *name, struct buffer *dst,
     BUF_MEM *bptr;
     BIO_get_mem_ptr(bio, &bptr);
 
-    *dst = alloc_buf_gc(bptr->length, gc);
+    *dst = alloc_buf_gc(bptr->length + 1, gc);
     ASSERT(buf_write(dst, bptr->data, bptr->length));
+    buf_null_terminate(dst);
 
     ret = true;
 cleanup: