diff mbox

crypto: aes: always rename internal symbols

Message ID 1465250735-30064-1-git-send-email-vapier@gentoo.org
State New
Headers show

Commit Message

Mike Frysinger June 6, 2016, 10:05 p.m. UTC
From: Mike Frysinger <vapier@chromium.org>

OpenSSL's libcrypto always defines AES symbols with the same names as
qemu's local aes code.  This is problematic when enabling at least curl
as that frequently also uses libcrypto.  It might not be noticed when
running, but if you try to statically link, everything falls down.

An example snippet:
  LINK  qemu-nbd
.../libcrypto.a(aes-x86_64.o): In function 'AES_encrypt':
(.text+0x460): multiple definition of 'AES_encrypt'
crypto/aes.o:aes.c:(.text+0x670): first defined here
.../libcrypto.a(aes-x86_64.o): In function 'AES_decrypt':
(.text+0x9f0): multiple definition of 'AES_decrypt'
crypto/aes.o:aes.c:(.text+0xb30): first defined here
.../libcrypto.a(aes-x86_64.o): In function 'AES_cbc_encrypt':
(.text+0xf90): multiple definition of 'AES_cbc_encrypt'
crypto/aes.o:aes.c:(.text+0xff0): first defined here
collect2: error: ld returned 1 exit status
.../qemu-2.6.0/rules.mak:105: recipe for target 'qemu-nbd' failed
make: *** [qemu-nbd] Error 1

The aes.h header has redefines already for FreeBSD, but go ahead and
enable that for everyone since there's no real good reason to not use
a namespace all the time.

Signed-off-by: Mike Frysinger <vapier@chromium.org>
---
 include/crypto/aes.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Daniel P. Berrangé June 7, 2016, 8:21 a.m. UTC | #1
On Mon, Jun 06, 2016 at 06:05:35PM -0400, Mike Frysinger wrote:
> From: Mike Frysinger <vapier@chromium.org>
> 
> OpenSSL's libcrypto always defines AES symbols with the same names as
> qemu's local aes code.  This is problematic when enabling at least curl
> as that frequently also uses libcrypto.  It might not be noticed when
> running, but if you try to statically link, everything falls down.
> 
> An example snippet:
>   LINK  qemu-nbd
> .../libcrypto.a(aes-x86_64.o): In function 'AES_encrypt':
> (.text+0x460): multiple definition of 'AES_encrypt'
> crypto/aes.o:aes.c:(.text+0x670): first defined here
> .../libcrypto.a(aes-x86_64.o): In function 'AES_decrypt':
> (.text+0x9f0): multiple definition of 'AES_decrypt'
> crypto/aes.o:aes.c:(.text+0xb30): first defined here
> .../libcrypto.a(aes-x86_64.o): In function 'AES_cbc_encrypt':
> (.text+0xf90): multiple definition of 'AES_cbc_encrypt'
> crypto/aes.o:aes.c:(.text+0xff0): first defined here
> collect2: error: ld returned 1 exit status
> .../qemu-2.6.0/rules.mak:105: recipe for target 'qemu-nbd' failed
> make: *** [qemu-nbd] Error 1
> 
> The aes.h header has redefines already for FreeBSD, but go ahead and
> enable that for everyone since there's no real good reason to not use
> a namespace all the time.
> 
> Signed-off-by: Mike Frysinger <vapier@chromium.org>
> ---
>  include/crypto/aes.h | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)

Thanks, applied to the crypto patch queue.

Regards,
Daniel
diff mbox

Patch

diff --git a/include/crypto/aes.h b/include/crypto/aes.h
index a006da2224a9..12fb321b89de 100644
--- a/include/crypto/aes.h
+++ b/include/crypto/aes.h
@@ -10,14 +10,13 @@  struct aes_key_st {
 };
 typedef struct aes_key_st AES_KEY;
 
-/* FreeBSD has its own AES_set_decrypt_key in -lcrypto, avoid conflicts */
-#ifdef __FreeBSD__
+/* FreeBSD/OpenSSL have their own AES functions with the same names in -lcrypto
+ * (which might be pulled in via curl), so redefine to avoid conflicts. */
 #define AES_set_encrypt_key QEMU_AES_set_encrypt_key
 #define AES_set_decrypt_key QEMU_AES_set_decrypt_key
 #define AES_encrypt QEMU_AES_encrypt
 #define AES_decrypt QEMU_AES_decrypt
 #define AES_cbc_encrypt QEMU_AES_cbc_encrypt
-#endif
 
 int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 	AES_KEY *key);