Commit graph

12377 commits

Author SHA1 Message Date
Dr. Stephen Henson
bc9563f83d Use SSL3_HM_HEADER_LENGTH instead of 4.
Reviewed-by: Matt Caswell <matt@openssl.org>
2016-09-21 19:56:05 +01:00
Dr. Stephen Henson
709ec8b384 Remove unnecessary check.
The overflow check will never be triggered because the
the n2l3 result is always less than 2^24.

Reviewed-by: Matt Caswell <matt@openssl.org>
2016-09-21 19:56:05 +01:00
Rich Salz
62841a2350 Dcoument -alpn flag
Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit 776e15f939)
2016-09-21 11:24:59 -04:00
Rich Salz
ceb7342dab GH1555: Don't bump size on realloc failure
Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit 6fcace45bd)
2016-09-21 10:42:10 -04:00
Richard Levitte
9583e4166d apps/apps.c: include sys/socket.h to declare recv()
Reviewed-by: Tim Hudson <tjh@openssl.org>
(cherry picked from commit a19228b7f4)
2016-09-21 16:21:08 +02:00
Dr. Stephen Henson
ff553f8371 Fix small OOB reads.
In ssl3_get_client_certificate, ssl3_get_server_certificate and
ssl3_get_certificate_request check we have enough room
before reading a length.

Thanks to Shi Lei (Gear Team, Qihoo 360 Inc.) for reporting these bugs.

CVE-2016-6306

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
2016-09-21 14:10:59 +01:00
Matt Caswell
d0cbaa2f3a Fix a missing NULL check in dsa_builtin_paramgen
We should check the last BN_CTX_get() call to ensure that it isn't NULL
before we try and use any of the allocated BIGNUMs.

Issue reported by Shi Lei.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit 1ff7425d61)
2016-09-21 13:35:11 +01:00
Richard Levitte
a5e55f6297 RT4669: dgst can only sign/verify one file
Check arg count and print an error message.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-20 21:56:04 +02:00
Marcus Meissner
6180c0ff0c initialize the RSA struct to 0.
This helps with program code linked against static builds accessing a uninitialized ->engine pointer.

CLA: none; trivial

Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1540)
2016-09-19 22:06:35 -04:00
Dr. Stephen Henson
32cc4c2627 update default dependencies
Reviewed-by: Richard Levitte <levitte@openssl.org>
2016-09-16 00:10:00 +01:00
Matt Caswell
502fcc67cc Revert "Abort on unrecognised warning alerts"
This reverts commit 15d8174932.

There were some unexpected side effects to this commit, e.g. in SSLv3 a
warning alert gets sent "no_certificate" if a client does not send a
Certificate during Client Auth. With the above commit this causes the
connection to abort, which is incorrect. There may be some other edge cases
like this so we need to have a rethink on this.

Reviewed-by: Tim Hudson <tjh@openssl.org>
2016-09-15 22:53:27 +01:00
Richard Levitte
15c088e4cf Finally, make sure vms_term_sock.c is built
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Richard Levitte
d6d04b64f5 Refactor to avoid unnecessary preprocessor logic
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Richard Levitte
b50826727e Reformat to fit OpenSSL source code standards
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Richard Levitte
a2d2120033 Remove entirely unnecessary pointer size guards
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Richard Levitte
4585254547 Add copyright and license on apps/vms_term_sock.[ch]
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Richard Levitte
1015609ac0 VSI submission: redirect terminal input through socket
This is needed, because on VMS, select() can only be used on sockets.  being
able to use select() on all kinds of file descriptors is unique to Unix.

So, the solution for VMS is to create a layer that translates input from
standard input to socket communication.

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 23:23:06 +02:00
Dr. Stephen Henson
d692475989 Fix memory leak on realloc error.
Backport leak fix from master branch.

Thanks to Shi Lei (Gear Team, Qihoo 360 Inc.) for reporting this bug.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 12:49:00 +01:00
Dr. Stephen Henson
ea060e026d Fix memory leak on error.
Thanks to Shi Lei (Gear Team, Qihoo 360 Inc.) for reporting this bug.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-15 12:49:00 +01:00
Richard Levitte
b05f231cd9 VMS: only use _realloc32 with /POINTER_SIZE=32
This fixes the following error when building with no particular pointer size
is specified (implied 32 bit):

    static void *(*realloc_func) (void *, size_t) = realloc;
    ................................................^
    %CC-E-UNDECLARED, In the initializer for realloc_func, "_realloc32" is not declared.
    at line number 93 in file DEV:[OPENSSL102.crypto]mem.c;1

Reviewed-by: Andy Polyakov <appro@openssl.org>
2016-09-15 10:33:42 +02:00
Matt Caswell
68f11e82d9 Add some sanity checks around usage of t_fromb64()
The internal SRP function t_fromb64() converts from base64 to binary. It
does not validate that the size of the destination is sufficiently large -
that is up to the callers. In some places there was such a check, but not
in others.

Add an argument to t_fromb64() to provide the size of the destination
buffer and validate that we don't write too much data. Also add some sanity
checks to the callers where appropriate.

With thanks to Shi Lei for reporting this issue.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit 73f0df8331)
2016-09-14 10:17:46 +01:00
Matt Caswell
15d8174932 Abort on unrecognised warning alerts
A peer continually sending unrecognised warning alerts could mean that we
make no progress on a connection. We should abort rather than continuing if
we receive an unrecognised warning alert.

Thanks to Shi Lei for reporting this issue.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-13 12:00:07 +01:00
Richard Levitte
204fb53895 Add enginesdir to libcrypto.pc pkg-config file
Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-12 16:29:39 +02:00
Dr. Stephen Henson
5ecb5467b6 Fix memory leak on error.
Backport leak fix from master branch.

Thanks to Shi Lei for reporting this bug.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-09-11 23:52:34 +01:00
Rich Salz
373a56139f Make update
Reviewed-by: Andy Polyakov <appro@openssl.org>
2016-09-09 17:26:26 -04:00
Richard Levitte
20d402a38e If errno is ENXIO in BSS_new_file(), set BIO_R_NO_SUCH_FILE
VMS sets that errno when the device part of a file spec is malformed
or a logical name that doesn't exist.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit e82e2186e9)
2016-09-09 00:11:55 +02:00
David Woodhouse
8195a86911 Avoid EVP_PKEY_cmp() crash on EC keys without public component
Some hardware devices don't provide the public EC_POINT data. The only
way for X509_check_private_key() to validate that the key matches a
given certificate is to actually perform a sign operation and then
verify it using the public key in the certificate.

Maybe that can come later, as discussed in issue 1532. But for now let's
at least make it fail gracefully and not crash.

GH: 1532

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1547)
(cherry picked from commit 92ed7fa575)
2016-09-07 13:56:43 -04:00
Rich Salz
3f10149603 Misc BN fixes
Never output -0; make "negative zero" an impossibility.
Do better checking on BN_rand top/bottom requirements and #bits.
Update doc.
Ignoring trailing garbage in BN_asc2bn.

Port this commit from boringSSL: https://boringssl.googlesource.com/boringssl/+/899b9b19a4cd3fe526aaf5047ab9234cdca19f7d%5E!/
        Ensure |BN_div| never gives negative zero in the no_branch code.

        Have |bn_correct_top| fix |bn->neg| if the input is zero so that we
        don't have negative zeros lying around.

        Thanks to Brian Smith for noticing.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit 01c09f9fde)
(Some manual work required)
2016-09-06 11:09:50 -04:00
Andy Polyakov
2a20b6d973 crypto/bn/*: x86[_64] division instruction doesn't handle constants, change constraint from 'g' to 'r'.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
(cherry picked from commit 68b4a6e91f)
2016-08-31 16:46:11 +02:00
Matt Caswell
7c59fbfb26 Ensure the CertStatus message adds a DTLS message header where needed
The function tls_construct_cert_status() is called by both TLS and DTLS
code. However it only ever constructed a TLS message header for the message
which obviously failed in DTLS.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-30 15:06:01 +01:00
Matt Caswell
7fb82d0674 SRP_create_verifier does not check for NULL before OPENSSL_cleanse
OPENSSL_cleanse() does not validate its input parameter for NULL so
SRP_create_verifier() should do so instead. Otherwise a segfault will
result.

Alternative solution to GitHub PR#1006

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-26 20:40:37 +01:00
Richard Levitte
06a549c435 Improve the definition of STITCHED_CALL in e_rc4_hmac_md5.c
The definition of STITCHED_CALL relies on OPENSSL_NO_ASM.  However,
when a configuration simply lacks the assembler implementation for RC4
(which is where we have implemented the stitched call), OPENSSL_NO_ASM
isn't implemented.  Better, then, to rely on specific macros that
indicated that RC4 (and MD5) are implemented in assembler.

For this to work properly, we must also make sure Configure adds the
definition of RC4_ASM among the C flags.

(partly cherry picked from commit 216e8d9103)

Reviewed-by: Andy Polyakov <appro@openssl.org>
2016-08-26 21:19:18 +02:00
FdaSilvaYY
a404656a8b Fix a few leaks in X509_REQ_to_X509.
Fix a possible leak on NETSCAPE_SPKI_verify failure.

Backport of 0517538d1a
Backport of f6c006ea76

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
2016-08-26 14:43:31 +01:00
David Woodhouse
50c30153d3 Add basic test for Cisco DTLS1_BAD_VER and record replay handling
(Modified for 1.0.2 by adding selected PACKET_xx() functions and PRF, and
subsequent cleanup from commit eb633d03fe)

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 40425899200a3dea9ec3684d3eb80bcf50c99baf)
2016-08-26 13:44:11 +01:00
David Woodhouse
ba30f1a070 Fix ubsan 'left shift of negative value -1' error in satsub64be()
Baroque, almost uncommented code triggers behaviour which is undefined
by the C standard. You might quite reasonably not care that the code was
broken on ones-complement machines, but if we support a ubsan build then
we need to at least pretend to care.

It looks like the special-case code for 64-bit big-endian is going to
behave differently (and wrongly) on wrap-around, because it treats the
values as signed. That seems wrong, and allows replay and other attacks.
Surely you need to renegotiate and start a new epoch rather than
wrapping around to sequence number zero again?

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 2e94723c1b)
2016-08-26 13:44:11 +01:00
David Woodhouse
df426c0691 Fix SSL_export_keying_material() for DTLS1_BAD_VER
Commit d8e8590e ("Fix missing return value checks in SCTP") made the
DTLS handshake fail, even for non-SCTP connections, if
SSL_export_keying_material() fails. Which it does, for DTLS1_BAD_VER.

Apply the trivial fix to make it succeed, since there's no real reason
why it shouldn't even though we never need it.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit c8a18468ca)
2016-08-26 13:44:11 +01:00
Matt Caswell
847fe92910 Fix the no-tls1 option
This also fixes no-tls which is an alias for no-tls1 in 1.0.2 (it is not
possible to do no-tls1_1 or no-tls1_2 in 1.0.2).

Because it is not possible to disable TLS1.1 or TLS1.2 it no longer follows
that disabling TLS1.0 should force the disabling of tlsext.

Also a few missing ifdef guards.

GitHub Iusse#935

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-26 13:38:50 +01:00
Andy Polyakov
3953bf53da ec/asm/ecp_nistz256-x86_64.pl: /cmovb/cmovc/ as nasm doesn't recognize cmovb.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit d3034d31e7)
2016-08-26 11:53:03 +02:00
Andy Polyakov
09f0535681 ec/ecp_nistz256: harmonize is_infinity with ec_GFp_simple_is_at_infinity.
RT#4625

Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit e3057a57ca)
2016-08-26 11:51:52 +02:00
Andy Polyakov
e76cf5c06d ec/asm/ecp_nistz256-x86_64.pl: addition to perform stricter reduction.
Addition was not preserving inputs' property of being fully reduced.

Thanks to Brian Smith for reporting this.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit b62b2454fa)
2016-08-26 11:51:25 +02:00
Todd Short
1f61e8f07a Always use session_ctx when removing a session
Sessions are stored on the session_ctx, which doesn't change after
SSL_set_SSL_CTX().

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
2016-08-26 10:19:56 +01:00
Dr. Stephen Henson
1027ad4f34 Avoid overflow in MDC2_Update()
Thanks to Shi Lei for reporting this issue.

CVE-2016-6303

Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 55d83bf7c1)
2016-08-24 14:17:53 +01:00
Rich Salz
0fff506588 SWEET32 (CVE-2016-2183): Move DES from HIGH to MEDIUM
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Reviewed-by: Emilia Käsper <emilia@openssl.org>
2016-08-24 08:55:50 -04:00
Matt Caswell
0ec0104335 Fix no-ec
Use a ciphersuite in dtlstest that is not affected by no-* options.
Backport of commit fe34735c19.

Reviewed-by: Richard Levitte <levitte@openssl.org>
2016-08-24 09:23:14 +01:00
Dr. Stephen Henson
baaabfd8fd Sanity check ticket length.
If a ticket callback changes the HMAC digest to SHA512 the existing
sanity checks are not sufficient and an attacker could perform a DoS
attack with a malformed ticket. Add additional checks based on
HMAC size.

Thanks to Shi Lei for reporting this bug.

CVE-2016-6302

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-23 23:18:51 +01:00
Richard Levitte
3cb28d1888 mk1mf: dtlstest needs ssltestlib, include it with a hack
We don't really have a mechanism to include other object files into a given
test program.  For now, a simple hack in mk1mf.pl will do.

RT#4653

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-23 00:09:40 +02:00
David Benjamin
01f879d3e3 Don't check for malloc failure twice.
a03f81f4ea added a malloc failure check to
EVP_PKEY_keygen, but there already was one.

Signed-off-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Rich Salz <rsalz@openssl.org>

GH: #1473
2016-08-22 21:20:31 +02:00
Kazuki Yamaguchi
67e11f1d44 Fix overflow check in BN_bn2dec()
Fix an off by one error in the overflow check added by 07bed46f33
("Check for errors in BN_bn2dec()").

Reviewed-by: Stephen Henson <steve@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 099e2968ed)
2016-08-22 17:07:34 +01:00
Rich Salz
561530da96 RT2676: Reject RSA eponent if even or 1
Also, re-organize RSA check to use goto err.
Try all checks, not just stopping at first (via Richard Levitte)

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit 464d59a5bb)
2016-08-22 11:52:17 -04:00
Richard Levitte
51690fb888 VMS: Use strict refdef extern model when building library object files
Most of the time, this isn't strictly needed.  However, in the default
extern model (called relaxed refdef), symbols are treated as weak
common objects unless they are initialised.  The librarian doesn't
include weak symbols in the (static) libraries, which renders them
invisible when linking a program with said those libraries, which is a
problem at times.

Using the strict refdef model is much more like standard C on all
other platforms, and thereby avoid the issues that come with the
relaxed refdef model.

Note: this doesn't apply to VAX C.  It's possible that this will make
OpenSSL building with VAX C difficult some time in the future if it
isn't already.  However, VAX C is a very old compiler that we don't
expect to see too often, as DEC C (a.k.a VMS C) should have replaced
it a long time ago.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2016-08-22 15:50:28 +02:00