AddressSanitizer Stack Buffer Overflow

396
01 августа 2017, 17:45

Есть следующий код

#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);
}
READ ALSO
Как получить язык текущей локали

Как получить язык текущей локали

Есть ли кроссплатформенный вариант получения языка из текущей локали пользователя/системы(Не Си локали, а например ту, что в $LANG)? В Boost ничего...

294
Вопрос по символу ENTER

Вопрос по символу ENTER

Пишу программу с использованием математических операторов по книгеВозник вопрос (который возможно был уже задан): как правильно в условии...

324
Как в input вывести label?

Как в input вывести label?

В инпут я подтягиваю компанию ajaxом, а id компании записываю в @HtmlHiddenFor

416