summaryrefslogtreecommitdiffstats
path: root/lib/libssl/src
diff options
context:
space:
mode:
authordoug <doug@openbsd.org>2015-02-07 04:37:35 +0000
committerdoug <doug@openbsd.org>2015-02-07 04:37:35 +0000
commit41724196798bd9b55cc71189b0efbc26cd15b004 (patch)
treefa9db4f03e945144847576859ea649fc36ab8083 /lib/libssl/src
parentAttempt to implement the OpenSSL error dance so that TLS read/write (diff)
downloadwireguard-openbsd-41724196798bd9b55cc71189b0efbc26cd15b004.tar.xz
wireguard-openbsd-41724196798bd9b55cc71189b0efbc26cd15b004.zip
Only call free in CBB_init().
CBB_init_fixed() should not call free because it can lead to use after free or double free bugs. The caller should be responsible for creating and destroying the buffer. From BoringSSL commit a84f06fc1eee6ea25ce040675fbad72c532afece miod agrees with the reasoning ok jsing@, beck@
Diffstat (limited to 'lib/libssl/src')
-rw-r--r--lib/libssl/src/ssl/bs_cbb.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/libssl/src/ssl/bs_cbb.c b/lib/libssl/src/ssl/bs_cbb.c
index 94ca54f43b7..eed80916985 100644
--- a/lib/libssl/src/ssl/bs_cbb.c
+++ b/lib/libssl/src/ssl/bs_cbb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bs_cbb.c,v 1.3 2015/02/06 22:22:33 doug Exp $ */
+/* $OpenBSD: bs_cbb.c,v 1.4 2015/02/07 04:37:35 doug Exp $ */
/*
* Copyright (c) 2014, Google Inc.
*
@@ -29,7 +29,6 @@ cbb_init(CBB *cbb, uint8_t *buf, size_t cap)
base = malloc(sizeof(struct cbb_buffer_st));
if (base == NULL) {
- free(buf);
return 0;
}
@@ -53,7 +52,11 @@ CBB_init(CBB *cbb, size_t initial_capacity)
if (initial_capacity > 0 && buf == NULL)
return 0;
- return cbb_init(cbb, buf, initial_capacity);
+ if (!cbb_init(cbb, buf, initial_capacity)) {
+ free(buf);
+ return 0;
+ }
+ return 1;
}
int