Revision: 17689 http://sourceforge.net/p/edk2/code/17689 Author: lersek Date: 2015-06-23 14:54:00 +0000 (Tue, 23 Jun 2015) Log Message: ----------- CryptoPkg: OpensslLib: reintroduce EFIAPI for ERR_add_error_data()
Git commit f93f78ea70 (SVN r17633), with subject "CryptoPkg: Update openssl patch file from 0.9.8zf to 1.0.2c", replaced the file CryptoPkg/Library/OpensslLib/EDKII_openssl-0.9.8zf.patch with CryptoPkg/Library/OpensslLib/EDKII_openssl-1.0.2c.patch In the process, two hunks were lost that used to add EFIAPI to the declaration of the variadic function ERR_add_error_data(). The VA_START() macro, from "MdePkg/Include/Base.h", expands to an EFIAPI-dependent implementation when !defined(__CC_ARM) && (!defined(__GNUC__) || defined(NO_BUILTIN_VA_FUNCS)) Under such circumstances, the va_start() macro invocation in ERR_add_error_data() -- which is translated to VA_START() by "CryptoPkg/Include/OpenSslSupport.h" -- results in EFIAPI-dependent code, but callers of the function pass the arguments incorrectly, because the declaration doesn't state EFIAPI. This leads to crashes when ERR_add_error_vdata(), called by ERR_add_error_data(), tries to access the arguments forwarded to it. Restore the missing hunk from before SVN r17633. Cc: Qin Long <qin.l...@intel.com> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> Cc: Gary Ching-Pang Lin <g...@suse.com> Cc: Peter Jones <pjo...@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <ler...@redhat.com> Acked-by: Peter Jones <pjo...@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheu...@linaro.org> Reviewed-by: Qin Long <qin.l...@intel.com> Revision Links: -------------- http://sourceforge.net/p/edk2/code/17633 http://sourceforge.net/p/edk2/code/17633 Modified Paths: -------------- trunk/edk2/CryptoPkg/Library/OpensslLib/EDKII_openssl-1.0.2c.patch Modified: trunk/edk2/CryptoPkg/Library/OpensslLib/EDKII_openssl-1.0.2c.patch =================================================================== --- trunk/edk2/CryptoPkg/Library/OpensslLib/EDKII_openssl-1.0.2c.patch 2015-06-23 14:37:13 UTC (rev 17688) +++ trunk/edk2/CryptoPkg/Library/OpensslLib/EDKII_openssl-1.0.2c.patch 2015-06-23 14:54:00 UTC (rev 17689) @@ -344,3 +344,37 @@ #endif #if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) +diff U3 crypto/err/err.c crypto/err/err.c +--- crypto/err/err.c ++++ crypto/err/err.c +@@ -1072,7 +1072,12 @@ void ERR_set_error_data(char *data, int flags) + es->err_data_flags[i] = flags; + } + ++/* Add EFIAPI for UEFI version. */ ++#if defined(OPENSSL_SYS_UEFI) ++void EFIAPI ERR_add_error_data(int num, ...) ++#else + void ERR_add_error_data(int num, ...) ++#endif + { + va_list args; + va_start(args, num); +diff U3 crypto/err/err.h crypto/err/err.h +--- crypto/err/err.h ++++ crypto/err/err.h +@@ -344,7 +344,14 @@ void ERR_print_errors_fp(FILE *fp); + # ifndef OPENSSL_NO_BIO + void ERR_print_errors(BIO *bp); + # endif ++ ++/* Add EFIAPI for UEFI version. */ ++#if defined(OPENSSL_SYS_UEFI) ++void EFIAPI ERR_add_error_data(int num, ...); ++#else + void ERR_add_error_data(int num, ...); ++#endif ++ + void ERR_add_error_vdata(int num, va_list args); + void ERR_load_strings(int lib, ERR_STRING_DATA str[]); + void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); ------------------------------------------------------------------------------ Monitor 25 network devices or servers for free with OpManager! OpManager is web-based network management software that monitors network devices and physical & virtual servers, alerts via email & sms for fault. Monitor 25 devices for free with no restriction. Download now http://ad.doubleclick.net/ddm/clk/292181274;119417398;o _______________________________________________ edk2-commits mailing list edk2-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-commits