iojs: fix CVE-2015-1793.
This commit is contained in:
parent
8a7f85cc48
commit
21cd45057e
3 changed files with 88 additions and 1 deletions
75
srcpkgs/iojs/patches/X509_verify_cert.patch
Normal file
75
srcpkgs/iojs/patches/X509_verify_cert.patch
Normal file
|
@ -0,0 +1,75 @@
|
|||
--- deps/openssl/openssl/crypto/x509/x509_vfy.c
|
||||
+++ deps/openssl/openssl/crypto/x509/x509_vfy.c
|
||||
@@ -193,6 +193,14 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
X509err(X509_F_X509_VERIFY_CERT, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY);
|
||||
return -1;
|
||||
}
|
||||
+ if (ctx->chain != NULL) {
|
||||
+ /*
|
||||
+ * This X509_STORE_CTX has already been used to verify a cert. We
|
||||
+ * cannot do another one.
|
||||
+ */
|
||||
+ X509err(X509_F_X509_VERIFY_CERT, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
cb = ctx->verify_cb;
|
||||
|
||||
@@ -200,15 +208,13 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
* first we make sure the chain we are going to build is present and that
|
||||
* the first entry is in place
|
||||
*/
|
||||
- if (ctx->chain == NULL) {
|
||||
- if (((ctx->chain = sk_X509_new_null()) == NULL) ||
|
||||
- (!sk_X509_push(ctx->chain, ctx->cert))) {
|
||||
- X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
- goto end;
|
||||
- }
|
||||
- CRYPTO_add(&ctx->cert->references, 1, CRYPTO_LOCK_X509);
|
||||
- ctx->last_untrusted = 1;
|
||||
+ if (((ctx->chain = sk_X509_new_null()) == NULL) ||
|
||||
+ (!sk_X509_push(ctx->chain, ctx->cert))) {
|
||||
+ X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
+ goto end;
|
||||
}
|
||||
+ CRYPTO_add(&ctx->cert->references, 1, CRYPTO_LOCK_X509);
|
||||
+ ctx->last_untrusted = 1;
|
||||
|
||||
/* We use a temporary STACK so we can chop and hack at it */
|
||||
if (ctx->untrusted != NULL
|
||||
--- deps/openssl/openssl/doc/crypto/X509_STORE_CTX_new.pod
|
||||
+++ deps/openssl/openssl/doc/crypto/X509_STORE_CTX_new.pod
|
||||
@@ -40,10 +40,15 @@ is no longer valid.
|
||||
If B<ctx> is NULL nothing is done.
|
||||
|
||||
X509_STORE_CTX_init() sets up B<ctx> for a subsequent verification operation.
|
||||
-The trusted certificate store is set to B<store>, the end entity certificate
|
||||
-to be verified is set to B<x509> and a set of additional certificates (which
|
||||
-will be untrusted but may be used to build the chain) in B<chain>. Any or
|
||||
-all of the B<store>, B<x509> and B<chain> parameters can be B<NULL>.
|
||||
+It must be called before each call to X509_verify_cert(), i.e. a B<ctx> is only
|
||||
+good for one call to X509_verify_cert(); if you want to verify a second
|
||||
+certificate with the same B<ctx> then you must call X509_XTORE_CTX_cleanup()
|
||||
+and then X509_STORE_CTX_init() again before the second call to
|
||||
+X509_verify_cert(). The trusted certificate store is set to B<store>, the end
|
||||
+entity certificate to be verified is set to B<x509> and a set of additional
|
||||
+certificates (which will be untrusted but may be used to build the chain) in
|
||||
+B<chain>. Any or all of the B<store>, B<x509> and B<chain> parameters can be
|
||||
+B<NULL>.
|
||||
|
||||
X509_STORE_CTX_trusted_stack() sets the set of trusted certificates of B<ctx>
|
||||
to B<sk>. This is an alternative way of specifying trusted certificates
|
||||
diff --git a/doc/crypto/X509_verify_cert.pod b/doc/crypto/X509_verify_cert.pod
|
||||
index e5cfc6f..48055b0 100644
|
||||
--- deps/openssl/openssl/doc/crypto/X509_verify_cert.pod
|
||||
+++ deps/openssl/openssl/doc/crypto/X509_verify_cert.pod
|
||||
@@ -32,7 +32,8 @@ OpenSSL internally for certificate validation, in both the S/MIME and
|
||||
SSL/TLS code.
|
||||
|
||||
The negative return value from X509_verify_cert() can only occur if no
|
||||
-certificate is set in B<ctx> (due to a programming error) or if a retry
|
||||
+certificate is set in B<ctx> (due to a programming error); if X509_verify_cert()
|
||||
+twice without reinitialising B<ctx> in between; or if a retry
|
||||
operation is requested during internal lookups (which never happens with
|
||||
standard lookup methods). It is however recommended that application check
|
||||
for <= 0 return value on error.
|
|
@ -0,0 +1,12 @@
|
|||
--- deps/openssl/openssl/crypto/x509/x509_vfy.c
|
||||
+++ deps/openssl/openssl/crypto/x509/x509_vfy.c
|
||||
@@ -392,8 +392,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
xtmp = sk_X509_pop(ctx->chain);
|
||||
X509_free(xtmp);
|
||||
num--;
|
||||
- ctx->last_untrusted--;
|
||||
}
|
||||
+ ctx->last_untrusted = sk_X509_num(ctx->chain);
|
||||
retry = 1;
|
||||
break;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'iojs'
|
||||
pkgname=iojs
|
||||
version=2.3.3
|
||||
revision=1
|
||||
revision=2
|
||||
wrksrc=iojs-v${version}
|
||||
hostmakedepends="pkg-config python"
|
||||
makedepends="zlib-devel python-devel
|
||||
|
|
Loading…
Reference in a new issue