summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@chromium.org>2016-06-06 18:05:35 -0400
committerDaniel P. Berrange <berrange@redhat.com>2016-06-13 12:41:17 +0100
commitc8d70e59738e672021926c7747af8ef9dea15c82 (patch)
tree1ab4f853b58dfb01c143bb07617a01176acd08d7
parentb35c1f3361ebf6ec9ea5022903af4b559bff6063 (diff)
downloadqemu-c8d70e59738e672021926c7747af8ef9dea15c82.tar.gz
qemu-c8d70e59738e672021926c7747af8ef9dea15c82.tar.bz2
qemu-c8d70e59738e672021926c7747af8ef9dea15c82.zip
crypto: aes: always rename internal symbols
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> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
-rw-r--r--include/crypto/aes.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/include/crypto/aes.h b/include/crypto/aes.h
index a006da2224..12fb321b89 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);