openssl/crypto
Nicola Tuveri 67cc2bae02 [SM2_sign] fix double free and return value
Currently, critical bugs prevent using SM2 signatures through the
`EVP_PKEY` interface: any application that managed to satisfy the
requirement of forcing SM3 as the message digest – even if this is
currently not possible transparently through the `EVP_PKEY` interface
and requires manually forcing the MD selection – would crash with a
segmentation fault upon calling the `SM2_sign()` function.

This is easily verified using the OpenSSL CLI to execute this critical
code path under the right conditions:
`openssl dgst -sm3 -hex -sign sm2.eckey /path/to/file/to/sign`

The issue is caused by a double free at the end of `SM2_sign()` in
`crypto/sm2/sm2_sign.c` in case of successful signature generation.
In addition, even if the double free was not causing segfaults,
the function returns the wrong return value in case of success (it
would return 0 rather than 1).

This patch fixes both problems.

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6066)
2018-04-25 10:24:43 +01:00
..
aes Update copyright year 2018-03-20 13:08:46 +00:00
aria Fix potential null problem. 2017-09-01 09:30:18 +10:00
asn1 a_strex.c: improve documentation of 'tag2nbyte' lookup table 2018-04-24 08:06:11 +02:00
async Update copyright year 2018-04-17 15:18:40 +02:00
bf Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
bio Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
blake2 Remove parentheses of return. 2017-10-18 16:05:06 +01:00
bn Remove superfluous NULL checks. Add Andy's BN_FLG comment. 2018-04-23 19:14:25 +01:00
buffer Update copyright year 2018-04-03 13:57:12 +01:00
camellia Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
cast Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
chacha Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
cmac Update copyright year 2018-04-17 15:18:40 +02:00
cms Update copyright year 2018-04-17 15:18:40 +02:00
comp Update copyright year 2018-04-03 13:57:12 +01:00
conf Update copyright year 2018-04-17 15:18:40 +02:00
ct Null pointer used. 2017-09-18 06:52:13 +10:00
des Update copyright year 2018-04-03 13:57:12 +01:00
dh Update copyright year 2018-04-17 15:18:40 +02:00
dsa Update copyright year 2018-04-17 15:18:40 +02:00
dso openssl#5668: corrections after compiling with -qinfo=all:als. 2018-04-14 13:28:31 +02:00
ec Remove superfluous NULL checks. Add Andy's BN_FLG comment. 2018-04-23 19:14:25 +01:00
engine Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
err Add missing malloc-return-null instance 2018-04-24 12:41:45 -04:00
evp Update copyright year 2018-04-17 15:18:40 +02:00
hmac Update copyright year 2018-04-17 15:18:40 +02:00
idea Remove parentheses of return. 2017-10-18 16:05:06 +01:00
include/internal Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
kdf Update copyright year 2018-04-17 15:18:40 +02:00
lhash Remove unused num.pl,segregnam scripts 2018-02-22 15:36:27 -05:00
md2 Remove parentheses of return. 2017-10-18 16:05:06 +01:00
md4 Remove parentheses of return. 2017-10-18 16:05:06 +01:00
md5 Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
mdc2 Remove parentheses of return. 2017-10-18 16:05:06 +01:00
modes ARM assembly pack: make it work with older assembler. 2018-04-23 17:29:59 +02:00
objects Update copyright year 2018-04-17 15:18:40 +02:00
ocsp Update copyright year 2018-02-13 13:59:25 +00:00
pem Clear buffer in PEM_write_bio 2018-04-19 15:47:43 +02:00
perlasm Copyright update of more files that have changed this year 2018-01-19 13:34:03 +01:00
pkcs7 Update copyright year 2018-03-20 13:08:46 +00:00
pkcs12 Add checks for alloc failing. 2017-09-06 09:52:16 -04:00
poly1305 poly1305/asm/poly1305-armv4.pl: remove unintentional relocation. 2018-04-18 19:47:53 +02:00
rand Fix usage of ossl_assert() 2018-04-23 18:45:53 +02:00
rc2 Remove email addresses from source code. 2017-10-13 10:06:59 -04:00
rc4 Update copyright year 2018-03-20 13:08:46 +00:00
rc5 Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
ripemd Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
rsa Update copyright year 2018-04-17 15:18:40 +02:00
seed Use _WIN32 over WIN32 for preprocessor conditional 2017-02-16 08:59:47 -05:00
sha 00-base-templates.conf: wire keccak1600-armv4 module. 2018-04-23 17:27:58 +02:00
siphash Update copyright year 2018-04-17 15:18:40 +02:00
sm2 [SM2_sign] fix double free and return value 2018-04-25 10:24:43 +01:00
sm3 SM3: restructure to EVP internal and update doc to right location 2017-11-06 07:21:15 +08:00
sm4 SM4: Add SM4 block cipher to EVP 2017-10-31 15:19:14 +10:00
srp Fix a memory leak in an error path 2018-04-17 17:26:16 +01:00
stack Update copyright year 2018-04-17 15:18:40 +02:00
store store/loader_file.c: rename variables causing conflicts with Android NDK. 2018-03-13 19:31:44 +01:00
ts o_time.c: use gmtime_s with MSVC 2018-03-27 20:12:34 +02:00
txt_db Update copyright year 2018-04-03 13:57:12 +01:00
ui Update copyright year 2018-04-17 15:18:40 +02:00
whrlpool Harmonize the make variables across all known platforms families 2018-02-14 17:13:53 +01:00
x509 Add missing malloc-return-null instance 2018-04-24 12:41:45 -04:00
x509v3 X509: add more error codes on malloc or sk_TYP_push failure 2018-04-24 09:08:33 +02:00
alphacpuid.pl Add assembly CRYPTO_memcmp. 2016-05-19 22:33:00 +02:00
arm64cpuid.pl Update copyright year 2018-02-13 13:59:25 +00:00
arm_arch.h Fix building linux-armv4 with --strict-warnings 2018-04-20 15:49:33 +02:00
armcap.c crypto/armcap.c: mask SHA512 hardware detection on iOS. 2018-03-06 23:18:24 +01:00
armv4cpuid.pl ARM assembly pack: make it work with older assembler. 2018-04-23 17:29:59 +02:00
build.info Remove import/use of File::Spec::Function 2018-04-01 22:41:04 +02:00
c64xpluscpuid.pl Many spelling fixes/typo's corrected. 2017-11-11 19:03:10 -05:00
cpt_err.c Set error code if alloc returns NULL 2018-04-05 15:13:55 -04:00
cryptlib.c Enabled OneCore Conf for Console Apps (removed nonUniversal API) 2018-04-03 18:39:22 +02:00
ctype.c Check for EOF in ASCII conversions. 2017-08-25 06:42:17 +10:00
cversion.c Fix SOURCE_DATE_EPOCH bug; use UTC 2017-11-27 14:34:14 -05:00
dllmain.c Remove parentheses of return. 2017-10-18 16:05:06 +01:00
ebcdic.c Remove email addresses from source code. 2017-10-13 10:06:59 -04:00
ex_data.c Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
ia64cpuid.S Fix typo in files in crypto folder 2017-08-05 20:42:06 +02:00
init.c Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
LPdir_nyi.c Fix typo (note by oneton@users.github) 2017-06-20 08:15:00 -04:00
LPdir_unix.c Adjust LPdir_unix.c on VMS for OpenSSL expectations 2018-03-12 23:01:02 +01:00
LPdir_vms.c Fix typo (note by oneton@users.github) 2017-06-20 08:15:00 -04:00
LPdir_win.c Fix typo (note by oneton@users.github) 2017-06-20 08:15:00 -04:00
LPdir_win32.c Fix typo (note by oneton@users.github) 2017-06-20 08:15:00 -04:00
LPdir_wince.c Fix typo (note by oneton@users.github) 2017-06-20 08:15:00 -04:00
mem.c Avoid unconditional store in CRYPTO_malloc. 2018-03-06 13:21:49 -05:00
mem_clr.c Fix some style issues... 2016-08-02 09:59:23 +02:00
mem_dbg.c Update copyright year 2018-02-13 13:59:25 +00:00
mem_sec.c mem_sec.c: portability fixup. 2018-03-12 11:03:17 +01:00
mips_arch.h Remove trailing whitespace from some files. 2016-10-10 23:36:21 +01:00
o_dir.c Move e_os.h to be the very first include. 2017-08-30 07:20:44 +10:00
o_fips.c Clean up references to FIPS 2017-02-28 15:26:25 +01:00
o_fopen.c Set error code on alloc failures 2018-04-03 11:31:16 -04:00
o_init.c Use "" not <> on e_os.h include 2017-08-22 11:07:56 -04:00
o_str.c Revert "GH614: Use memcpy()/strdup() when possible" 2017-09-14 10:26:54 +10:00
o_time.c Update copyright year 2018-04-03 13:57:12 +01:00
pariscid.pl Update copyright year 2018-04-03 13:57:12 +01:00
ppc_arch.h GH919: Fix wrappers for two headers 2016-05-24 11:04:38 -04:00
ppccap.c crypto/ppccap.c: SIGILL-free processor capabilities detection on MacOS X. 2017-04-02 20:45:59 +02:00
ppccpuid.pl Add assembly CRYPTO_memcmp. 2016-05-19 22:33:00 +02:00
s390x_arch.h s390x assembly pack: add KMF code path for aes-cfb/cfb8 2018-03-28 23:31:01 +02:00
s390xcap.c s390x assembly pack: extend s390x capability vector. 2017-10-30 14:31:32 +01:00
s390xcpuid.pl s390x assembly pack: add KMF code path for aes-cfb/cfb8 2018-03-28 23:31:01 +02:00
sparc_arch.h Copyright consolidation 09/10 2016-05-17 14:53:16 -04:00
sparccpuid.S Clean up references to FIPS 2017-02-28 15:26:25 +01:00
sparcv9cap.c Create a prototype for OPENSSL_rdtsc 2017-11-25 14:30:11 +01:00
threads_none.c Update copyright year 2018-04-17 15:18:40 +02:00
threads_pthread.c Update copyright year 2018-04-17 15:18:40 +02:00
threads_win.c Update copyright year 2018-04-17 15:18:40 +02:00
uid.c Cleaning UEFI Build with additional OPENSSL_SYS_UEFI flags 2017-03-29 07:35:59 +02:00
vms_rms.h Copyright consolidation 09/10 2016-05-17 14:53:16 -04:00
x86_64cpuid.pl Fix issues in ia32 RDRAND asm leading to reduced entropy 2018-03-08 10:27:49 -05:00
x86cpuid.pl Fix issues in ia32 RDRAND asm leading to reduced entropy 2018-03-08 10:27:49 -05:00