From dc21de24831a140e38597166d2e62febfd19b0fb Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 16 Dec 2017 14:21:08 -0500 Subject: [PATCH] Fix UBsan overflow finding We were cating UBsan findings under Clang similar to "adv-simd.h:1138:26: runtime error: addition of unsigned offset to 0x000002d41410 overflowed to 0x000002d41400". The problem was CRYPTOPP_CONSTANT, which used an enum. The compiler is allowed to pick the underlying data type, and Clang was picking a signed type --- adv-simd.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/adv-simd.h b/adv-simd.h index 308ff855..2b360b7f 100644 --- a/adv-simd.h +++ b/adv-simd.h @@ -88,8 +88,8 @@ inline size_t AdvancedProcessBlocks64_NEON2x6(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 8); - CRYPTOPP_CONSTANT(blockSize = 8) - CRYPTOPP_CONSTANT(neonBlockSize = 16) + const size_t blockSize = 8; + const size_t neonBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : neonBlockSize; size_t xorIncrement = xorBlocks ? neonBlockSize : 0; @@ -316,8 +316,8 @@ size_t AdvancedProcessBlocks128_NEON1x6(F1 func1, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); - CRYPTOPP_CONSTANT(blockSize = 16) - // CRYPTOPP_CONSTANT(neonBlockSize = 16) + const size_t blockSize = 16; + // const size_t neonBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize; size_t xorIncrement = xorBlocks ? blockSize : 0; @@ -455,8 +455,8 @@ size_t AdvancedProcessBlocks128_NEON2x6(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); - CRYPTOPP_CONSTANT(blockSize = 16) - // CRYPTOPP_CONSTANT(neonBlockSize = 16) + const size_t blockSize = 16; + // const size_t neonBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize; size_t xorIncrement = xorBlocks ? blockSize : 0; @@ -682,8 +682,8 @@ inline size_t AdvancedProcessBlocks64_SSE2x6(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 8); - CRYPTOPP_CONSTANT(blockSize = 8) - CRYPTOPP_CONSTANT(xmmBlockSize = 16) + const size_t blockSize = 8; + const size_t xmmBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : xmmBlockSize; size_t xorIncrement = xorBlocks ? xmmBlockSize : 0; @@ -916,8 +916,8 @@ inline size_t AdvancedProcessBlocks128_SSE2x6(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); - CRYPTOPP_CONSTANT(blockSize = 16) - // CRYPTOPP_CONSTANT(xmmBlockSize = 16) + const size_t blockSize = 16; + // const size_t xmmBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize; size_t xorIncrement = xorBlocks ? blockSize : 0; @@ -1101,8 +1101,8 @@ inline size_t AdvancedProcessBlocks128_SSE1x4(F1 func1, F4 func4, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); - CRYPTOPP_CONSTANT(blockSize = 16) - // CRYPTOPP_CONSTANT(xmmBlockSize = 16) + const size_t blockSize = 16; + // const size_t xmmBlockSize = 16; size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize; size_t xorIncrement = xorBlocks ? blockSize : 0;