From 24fd8541d47a46052b975db98b465faa7e4d898c Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Sat, 24 Aug 2019 11:28:19 +0200 Subject: [PATCH] Remove extern declarations of OPENSSL_ia32cap_P Use the header file internal/cryptlib.h instead. Remove checks for OPENSSL_NO_ASM and I386_ONLY in cryptlib.c, to match the checks in other places where OPENSSL_ia32cap_P is used and assumed to be initialized. Reviewed-by: Kurt Roeckx (Merged from https://github.com/openssl/openssl/pull/9688) --- crypto/cryptlib.c | 2 +- crypto/engine/eng_rdrand.c | 3 +-- crypto/evp/e_aes_cbc_hmac_sha1.c | 2 +- crypto/evp/e_aes_cbc_hmac_sha256.c | 2 +- crypto/evp/e_rc4_hmac_md5.c | 1 - crypto/include/internal/ciphermode_platform.h | 1 - crypto/modes/gcm128.c | 2 +- crypto/rand/rand_lib.c | 2 -- crypto/whrlpool/wp_block.c | 2 +- include/internal/cryptlib.h | 4 ++++ test/rdrand_sanitytest.c | 6 +----- 11 files changed, 11 insertions(+), 16 deletions(-) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 0048a3d210..7e89bbd6b5 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -18,7 +18,7 @@ extern unsigned int OPENSSL_ia32cap_P[4]; -# if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) +# if defined(OPENSSL_CPUID_OBJ) /* * Purpose of these minimalistic and character-type-agnostic subroutines diff --git a/crypto/engine/eng_rdrand.c b/crypto/engine/eng_rdrand.c index 2fcc0edff2..7dd3b9fdf6 100644 --- a/crypto/engine/eng_rdrand.c +++ b/crypto/engine/eng_rdrand.c @@ -12,6 +12,7 @@ #include #include #include "internal/engine.h" +#include "internal/cryptlib.h" #include #include #include @@ -79,8 +80,6 @@ static ENGINE *ENGINE_rdrand(void) void engine_load_rdrand_int(void) { - extern unsigned int OPENSSL_ia32cap_P[]; - if (OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) { ENGINE *toadd = ENGINE_rdrand(); if (!toadd) diff --git a/crypto/evp/e_aes_cbc_hmac_sha1.c b/crypto/evp/e_aes_cbc_hmac_sha1.c index 8d557e512e..9e393f0b88 100644 --- a/crypto/evp/e_aes_cbc_hmac_sha1.c +++ b/crypto/evp/e_aes_cbc_hmac_sha1.c @@ -15,6 +15,7 @@ #include #include #include +#include "internal/cryptlib.h" #include "internal/modes_int.h" #include "internal/evp_int.h" #include "internal/constant_time_locl.h" @@ -35,7 +36,6 @@ typedef struct { defined(__x86_64) || defined(__x86_64__) || \ defined(_M_AMD64) || defined(_M_X64) ) -extern unsigned int OPENSSL_ia32cap_P[]; # define AESNI_CAPABLE (1<<(57-32)) int aesni_set_encrypt_key(const unsigned char *userKey, int bits, diff --git a/crypto/evp/e_aes_cbc_hmac_sha256.c b/crypto/evp/e_aes_cbc_hmac_sha256.c index 6efd3000b8..e434ec009f 100644 --- a/crypto/evp/e_aes_cbc_hmac_sha256.c +++ b/crypto/evp/e_aes_cbc_hmac_sha256.c @@ -15,6 +15,7 @@ #include #include #include +#include "internal/cryptlib.h" #include "internal/modes_int.h" #include "internal/constant_time_locl.h" #include "internal/evp_int.h" @@ -35,7 +36,6 @@ typedef struct { defined(__x86_64) || defined(__x86_64__) || \ defined(_M_AMD64) || defined(_M_X64) ) -extern unsigned int OPENSSL_ia32cap_P[]; # define AESNI_CAPABLE (1<<(57-32)) int aesni_set_encrypt_key(const unsigned char *userKey, int bits, diff --git a/crypto/evp/e_rc4_hmac_md5.c b/crypto/evp/e_rc4_hmac_md5.c index d22abbb325..4d61faff61 100644 --- a/crypto/evp/e_rc4_hmac_md5.c +++ b/crypto/evp/e_rc4_hmac_md5.c @@ -71,7 +71,6 @@ static int rc4_hmac_md5_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, * rc4_md5-x86_64.pl */ md5_off = MD5_CBLOCK - key->md.num, blocks; unsigned int l; - extern unsigned int OPENSSL_ia32cap_P[]; # endif size_t plen = key->payload_length; diff --git a/crypto/include/internal/ciphermode_platform.h b/crypto/include/internal/ciphermode_platform.h index 40d012a8d1..f357ea5c84 100644 --- a/crypto/include/internal/ciphermode_platform.h +++ b/crypto/include/internal/ciphermode_platform.h @@ -101,7 +101,6 @@ void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, defined(_M_AMD64) || defined(_M_X64) ) /* AES-NI section */ -extern unsigned int OPENSSL_ia32cap_P[]; # define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) # ifdef VPAES_ASM diff --git a/crypto/modes/gcm128.c b/crypto/modes/gcm128.c index 371bf7637d..f37653be67 100644 --- a/crypto/modes/gcm128.c +++ b/crypto/modes/gcm128.c @@ -9,6 +9,7 @@ #include #include +#include "internal/cryptlib.h" #include "internal/modes_int.h" #if defined(BSWAP4) && defined(STRICT_ALIGNMENT) @@ -635,7 +636,6 @@ static void gcm_gmult_1bit(u64 Xi[2], const u64 H[2]) defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64)) # define GHASH_ASM_X86_OR_64 # define GCM_FUNCREF_4BIT -extern unsigned int OPENSSL_ia32cap_P[]; void gcm_init_clmul(u128 Htable[16], const u64 Xi[2]); void gcm_gmult_clmul(u64 Xi[2], const u128 Htable[16]); diff --git a/crypto/rand/rand_lib.c b/crypto/rand/rand_lib.c index 8b44b5502d..c865ece978 100644 --- a/crypto/rand/rand_lib.c +++ b/crypto/rand/rand_lib.c @@ -69,8 +69,6 @@ size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool) size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len); size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len); -extern unsigned int OPENSSL_ia32cap_P[]; - /* * Acquire entropy using Intel-specific cpu instructions * diff --git a/crypto/whrlpool/wp_block.c b/crypto/whrlpool/wp_block.c index 574ac124d4..c2c0b72681 100644 --- a/crypto/whrlpool/wp_block.c +++ b/crypto/whrlpool/wp_block.c @@ -36,6 +36,7 @@ * */ +#include "internal/cryptlib.h" #include "wp_locl.h" #include @@ -75,7 +76,6 @@ typedef unsigned long long u64; # define OPENSSL_SMALL_FOOTPRINT # endif # define GO_FOR_MMX(ctx,inp,num) do { \ - extern unsigned long OPENSSL_ia32cap_P[]; \ void whirlpool_block_mmx(void *,const void *,size_t); \ if (!(OPENSSL_ia32cap_P[0] & (1<<23))) break; \ whirlpool_block_mmx(ctx->H.c,inp,num); return; \ diff --git a/include/internal/cryptlib.h b/include/internal/cryptlib.h index d54ca24ee1..d591f203d2 100644 --- a/include/internal/cryptlib.h +++ b/include/internal/cryptlib.h @@ -84,7 +84,11 @@ DEFINE_LHASH_OF(MEM); # define HEX_SIZE(type) (sizeof(type)*2) void OPENSSL_cpuid_setup(void); +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) extern unsigned int OPENSSL_ia32cap_P[]; +#endif void OPENSSL_showfatal(const char *fmta, ...); int do_ex_data_init(OPENSSL_CTX *ctx); void crypto_cleanup_all_ex_data_int(OPENSSL_CTX *ctx); diff --git a/test/rdrand_sanitytest.c b/test/rdrand_sanitytest.c index 851e14ccf7..dcc9d2800a 100644 --- a/test/rdrand_sanitytest.c +++ b/test/rdrand_sanitytest.c @@ -11,7 +11,7 @@ #include #include #include "testutil.h" -#include +#include "internal/cryptlib.h" #if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ @@ -20,10 +20,6 @@ size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len); size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len); -void OPENSSL_cpuid_setup(void); - -extern unsigned int OPENSSL_ia32cap_P[4]; - static int sanity_check_bytes(size_t (*rng)(unsigned char *, size_t), int rounds, int min_failures, int max_retries, int max_zero_words) { -- 2.34.1