From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 68E4F803ED for ; Thu, 23 Mar 2017 11:33:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BD2A680478; Thu, 23 Mar 2017 18:33:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BD2A680478 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=lersek@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com BD2A680478 Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-84.phx2.redhat.com [10.3.116.84]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B704831A3; Thu, 23 Mar 2017 18:33:40 +0000 (UTC) To: Qin Long , edk2-devel@lists.01.org References: <20170323131932.6168-1-qin.long@intel.com> <20170323131932.6168-7-qin.long@intel.com> Cc: ting.ye@intel.com, jiaxin.wu@intel.com, ard.biesheuvel@linaro.org, glin@suse.com, ronald.cron@arm.com, Moso.Lee@citrix.com, thomas.palmer@hpe.com, David Woodhouse From: Laszlo Ersek Message-ID: Date: Thu, 23 Mar 2017 19:33:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170323131932.6168-7-qin.long@intel.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 23 Mar 2017 18:33:43 +0000 (UTC) Subject: Re: [PATCH v2 06/11] CryptoPkg: Fix handling of &strcmp function pointers X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 18:33:42 -0000 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 03/23/17 14:19, 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. > > 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. > > Cc: Ting Ye > Cc: Laszlo Ersek > Cc: Ard Biesheuvel > Cc: Gary Lin > Cc: Ronald Cron > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: David Woodhouse > Signed-off-by: Qin Long > --- > 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 e011a7cfee..e6858a94a4 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.
> +Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.
> 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 > @@ -276,7 +276,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.
> +Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.
> 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 > #include > +#include > > /* 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); > +} > Reviewed-by: Laszlo Ersek Tested-by: Laszlo Ersek (Tested as described in .) Thanks! Laszlo