CryptoPkg: OpensslLib: reintroduce EFIAPI for ERR_add_error_data()
authorLaszlo Ersek <>
Tue, 23 Jun 2015 14:54:00 +0000 (14:54 +0000)
committerlersek <lersek@Edk2>
Tue, 23 Jun 2015 14:54:00 +0000 (14:54 +0000)
Git commit f93f78ea70 (SVN r17633), with subject "CryptoPkg: Update
openssl patch file from 0.9.8zf to 1.0.2c", replaced the file




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__) ||

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 <>
Cc: Ard Biesheuvel <>
Cc: Gary Ching-Pang Lin <>
Cc: Peter Jones <>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <>
Acked-by: Peter Jones <>
Acked-by: Ard Biesheuvel <>
Reviewed-by: Qin Long <>
git-svn-id: 6f19259b-4bc3-4df7-8a09-765794883524


index 54e14d8af99d0f8c285ac50359c6d40008f56757..0d9575e94aef2b07250ff66f1dcaf44ec3ad5c9f 100644 (file)
@@ -344,3 +344,37 @@ diff U3 crypto/opensslconf.h crypto/opensslconf.h
  #if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)\r
+diff U3 crypto/err/err.c crypto/err/err.c\r
+--- crypto/err/err.c\r
++++ crypto/err/err.c\r
+@@ -1072,7 +1072,12 @@ void ERR_set_error_data(char *data, int flags)\r
+     es->err_data_flags[i] = flags;\r
+ }\r
++/* Add EFIAPI for UEFI version. */\r
++#if defined(OPENSSL_SYS_UEFI)\r
++void EFIAPI ERR_add_error_data(int num, ...)\r
+ void ERR_add_error_data(int num, ...)\r
+ {\r
+     va_list args;\r
+     va_start(args, num);\r
+diff U3 crypto/err/err.h crypto/err/err.h\r
+--- crypto/err/err.h\r
++++ crypto/err/err.h\r
+@@ -344,7 +344,14 @@ void ERR_print_errors_fp(FILE *fp);\r
+ # ifndef OPENSSL_NO_BIO\r
+ void ERR_print_errors(BIO *bp);\r
+ # endif\r
++/* Add EFIAPI for UEFI version. */\r
++#if defined(OPENSSL_SYS_UEFI)\r
++void EFIAPI ERR_add_error_data(int num, ...);\r
+ void ERR_add_error_data(int num, ...);\r
+ void ERR_add_error_vdata(int num, va_list args);\r
+ void ERR_load_strings(int lib, ERR_STRING_DATA str[]);\r
+ void ERR_unload_strings(int lib, ERR_STRING_DATA str[]);\r