Есть следующий код
#define SEED_KEY_SIZE 16
uint8 ServerDecryptionKey[SEED_KEY_SIZE] = { 0x38, 0xA7, 0x83, 0x15, 0xF8, 0x92, 0x25, 0x30, 0x71, 0x98, 0x67, 0xB1, 0x8C, 0x4, 0xE2, 0xAA };
HmacHash hash(SEED_KEY_SIZE, (uint8*)ServerDecryptionKey);
HmacHash::HmacHash(uint32 len, uint8 *seed)
{
HMAC_CTX_init(&m_ctx);
HMAC_Init_ex(&m_ctx, seed, len, EVP_sha1(), NULL) <- тут ошибка
}
При инициализации AddressSanitizer ругается:
==5029==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f184cb130d8 at pc 0x00000097922e bp 0x7f184cb12e50 sp 0x7f184cb12600
WRITE of size 112 at 0x7f184cb130d8 thread T12
#0 0x97922d in __interceptor_memset.part.35 (/app+0x97922d)
#1 0x7f186c1e665a in HMAC_Init_ex (/lib/x86_64-linux-gnu/libcrypto.so.1.0.0+0x8965a)
#2 0x1a8285d in HmacHash::HmacHash(unsigned int, unsigned char*) Hmac.cpp:27:5
Как исправить или что в этом не так?
clang version 5.0.0-svn308397-1~exp1 (trunk)
Target: x86_64-pc-linux-gnu
OpenSSL 1.0.2f
AddressSanitizer
Флаги сборки
-ggdb3 -O1 -m64 -march=native -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address -fstack-protector
Обновление:
void AuthCrypt::GenerateKey(uint8 *key, BigNumber *bn)
{
uint8 ServerDecryptionKey[SEED_KEY_SIZE] = { 0x38, 0xA7, 0x83, 0x15, 0xF8, 0x92, 0x25, 0x30, 0x71, 0x98, 0x67, 0xB1, 0x8C, 0x4, 0xE2, 0xAA };
HmacHash hash(SEED_KEY_SIZE, (uint8*)ServerDecryptionKey);
hash.UpdateBigNumber(bn);
hash.Finalize();
memcpy(key, hash.GetDigest(), SHA_DIGEST_LENGTH);
}
Продвижение своими сайтами как стратегия роста и независимости