From: Gary Lin <glin@suse.com>
To: Qin Long <qin.long@intel.com>
Cc: edk2-devel@lists.01.org, ard.biesheuvel@linaro.org,
ting.ye@intel.com, David Woodhouse <dwmw2@infradead.org>,
ronald.cron@arm.com, jiaxin.wu@intel.com, lersek@redhat.com
Subject: Re: [PATCH v1 3/9] CryptoPkg: Fix handling of &strcmp function pointers
Date: Wed, 22 Mar 2017 18:11:10 +0800 [thread overview]
Message-ID: <20170322101110.d7lpswvlhdpeaetd@GaryWorkstation> (raw)
In-Reply-To: <20170321155612.1192-4-qin.long@intel.com>
On Tue, Mar 21, 2017 at 11:56:06PM +0800, Qin Long wrote:
> In a couple of places, OpenSSL code uses the address of the strcmp()
> function, and assigns it to another comparator function pointer.
>
> Unfortunately, this falls foul of the inconsistent function ABI that we
> use in EDKII. We '#define strcmp AsciiStrCmp' but AsciiStrCmp is an
> EFIAPI function with the Microsoft ABI. And we're assigning its address
> to a non-EFIAPI function, which may well have a different ABI.
>
> The compiler *should* have complained about this error, thus:
>
> …/crypto/objects/o_names.c: In function ‘OBJ_NAME_new_index’:
> …/crypto/objects/o_names.c:94:30: error: assignment from incompatible
> pointer type [-Werror=incompatible-pointer-types]
> name_funcs->cmp_func = OPENSSL_strcmp;
> ^
> There's another one in crypto/lhash/lhash.c::lh_new() which has an
> explicit cast so even with compiler warnings we wouldn't have seen it.
>
> Fix this by providing an actual strcmp() function in the default ABI.
> We already *had* a prototype for it in OpenSslSupport.h, which was then
> superseded by the #define strcmp AsciiStrCmp.
>
> Now, OpenSSL code *can* use &strcmp without problems.
With this patch, we probably can remove "defined(OPENSSL_SYS_UEFI)" from
https://github.com/openssl/openssl/blob/master/crypto/objects/o_names.c#L32
Gary Lin
>
> Cc: Ting Ye <ting.ye@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Gary Lin <glin@suse.com>
> Cc: Ronald Cron <ronald.cron@arm.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
> Signed-off-by: Qin Long <qin.long@intel.com>
> ---
> CryptoPkg/Include/OpenSslSupport.h | 3 +--
> CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c | 8 +++++++-
> 2 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/CryptoPkg/Include/OpenSslSupport.h b/CryptoPkg/Include/OpenSslSupport.h
> index 91567c78f8..c3c5b5dcd7 100644
> --- a/CryptoPkg/Include/OpenSslSupport.h
> +++ b/CryptoPkg/Include/OpenSslSupport.h
> @@ -1,7 +1,7 @@
> /** @file
> Root include file to support building OpenSSL Crypto Library.
>
> -Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
> This program and the accompanying materials
> are licensed and made available under the terms and conditions of the BSD License
> which accompanies this distribution. The full text of the license may be found at
> @@ -275,7 +275,6 @@ extern FILE *stdout;
> #define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)
> #define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))
> #define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count))
> -#define strcmp AsciiStrCmp
> #define strncmp(string1,string2,count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count)))
> #define strcpy(strDest,strSource) AsciiStrCpyS(strDest,MAX_STRING_SIZE,strSource)
> #define strncpy(strDest,strSource,count) AsciiStrnCpyS(strDest,MAX_STRING_SIZE,strSource,(UINTN)count)
> diff --git a/CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c b/CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c
> index 9d6867ebce..e8a76d07ff 100644
> --- a/CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c
> +++ b/CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c
> @@ -2,7 +2,7 @@
> Intrinsic Memory Routines Wrapper Implementation for OpenSSL-based
> Cryptographic Library.
>
> -Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
> This program and the accompanying materials
> are licensed and made available under the terms and conditions of the BSD License
> which accompanies this distribution. The full text of the license may be found at
> @@ -15,6 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>
> #include <Base.h>
> #include <Library/BaseMemoryLib.h>
> +#include <Library/BaseLib.h>
>
> /* OpenSSL will use floating point support, and C compiler produces the _fltused
> symbol by default. Simply define this symbol here to satisfy the linker. */
> @@ -44,3 +45,8 @@ void * memset (void *dest, char ch, unsigned int count)
>
> return dest;
> }
> +
> +int strcmp (const char *s1, const char *s2)
> +{
> + return (int)AsciiStrCmp(s1, s2);
> +}
> --
> 2.11.1.windows.1
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
next prev parent reply other threads:[~2017-03-22 10:11 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-21 15:56 [PATCH v1 0/9] *** Upgrade CryptoPkg to use the latest OpenSSL 1.1.0xx/stable release *** Qin Long
2017-03-21 15:56 ` [PATCH v1 1/9] CryptoPkg/OpensslLib: Update INF files to support OpenSSL-1.1.0xx build Qin Long
2017-03-22 12:02 ` Laszlo Ersek
2017-03-22 12:18 ` Laszlo Ersek
2017-03-21 15:56 ` [PATCH v1 2/9] CryptoPkg/OpensslLib: Remove patch file and installation scripts Qin Long
2017-03-22 12:05 ` Laszlo Ersek
2017-03-21 15:56 ` [PATCH v1 3/9] CryptoPkg: Fix handling of &strcmp function pointers Qin Long
2017-03-22 10:11 ` Gary Lin [this message]
2017-03-23 2:16 ` Long, Qin
2017-03-23 3:39 ` Long, Qin
2017-03-21 15:56 ` [PATCH v1 4/9] CryptoPkg/OpensslLib: Use new Perl script for file list generation Qin Long
2017-03-21 15:56 ` [PATCH v1 5/9] CryptoPkg: Clean-up CRT Library Wrapper Qin Long
2017-03-21 15:56 ` [PATCH v1 6/9] CryptoPkg: Add extra build option to disable VS build warning Qin Long
2017-03-21 15:56 ` [PATCH v1 7/9] CryptoPkg: Update HMAC Wrapper implementation with opaque HMAC_CTX object Qin Long
2017-03-21 15:56 ` [PATCH v1 8/9] CryptoPkg: Update PK Ciphers Wrapper Implementations work with opaque objects Qin Long
2017-03-21 15:56 ` [PATCH v1 9/9] CryptoPkg/TlsLib: Update TLS Wrapper Library to align with OpenSSL changes Qin Long
2017-03-21 17:42 ` Palmer, Thomas
2017-03-22 1:32 ` Long, Qin
2017-03-23 1:20 ` Wu, Jiaxin
2017-03-23 16:23 ` Palmer, Thomas
2017-03-22 2:22 ` [PATCH v1 0/9] *** Upgrade CryptoPkg to use the latest OpenSSL 1.1.0xx/stable release *** Gao, Liming
2017-03-22 2:44 ` Long, Qin
2017-03-22 13:02 ` Laszlo Ersek
2017-03-22 16:20 ` Long, Qin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170322101110.d7lpswvlhdpeaetd@GaryWorkstation \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox