Message ID | 1465250735-30064-1-git-send-email-vapier@gentoo.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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);