Re: Experiencing Segfault in CryptoPP::StreamTransformationFilter in Linux build

Uri Blumenthal <[email protected]>
Newsgroups gmane.comp.encryption.cryptopp
Message-ID <[email protected]>
I don't even understand the code - but based on your symptoms (works until you increase the level of compiler optimization), I'd say it's a compiler bug. More so, a bug in a compiler that's most likely been fixed a long time ago.

Thus, incentive to mess with something that long lost its relevance is pretty low. 

Feel free to create and post a reproducer - a small example that compiles and demonstrates the problem, if you want to pursue this. Or just upgrade the compiler (should be done regardless - your development is insecure).

> On Apr 18, 2021, at 23:07, Sunandan Nandi <[email protected]> wrote:
> 
> 
> Hi Uri,
> 
> Thanks.OS version and clang version is project binding right now. But certainly, will check.
> 
> Do you see any obvious problem in the code snippet I have added in the above post?
> 
> Regards,
> Sunandan
> 
>> On Sun, Apr 18, 2021 at 5:45 PM Uri Blumenthal <[email protected]> wrote:
>> Considering that the current stable version of Clang is 11, would or not make sense to upgrade your compiler?
>> 
>> Not to mention that your OS probably does not get any security patches now - so, perhaps, moving from 18.04LTS to 20.04 LTS would be a good idea?
>> 
>> I regularly build with Clang and GCC, no crashes.
>> 
>>>> On Apr 18, 2021, at 08:02, Sunandan Nandi <[email protected]> wrote:
>>>> 
>>> Hi,
>>> 
>>> I am experiencing Segfault inside CryptoPP::StreamTransformationFilter.
>>> 
>>> Overview:
>>> I have downloaded and built CryptoPP as an external CMake module. 
>>> Problem:
>>> This segfault is happening only in Linux(Ubuntu 18.04.05LTS) Release build.
>>> 64-bit,compiler clang 6.0
>>> 
>>> GDB BT
>>> Thread 9 "***" received signal SIGSEGV, Segmentation fault.
>>> [Switching to Thread 0x7fffdb7fe700 (LWP 5835)]
>>> 0x0000000000000000 in ?? ()
>>> (gdb) bt
>>> #0  0x0000000000000000 in ?? ()
>>> #1  0x0000000000b7559d in CryptoPP::StreamTransformationFilter::StreamTransformationFilter (this=0x7fffdb7fd1c0, c=..., attachment=<optimized out>,
>>>     padding=<optimized out>) at filters.cpp:593
>>> #2  0x00000000004ff4fd in ***::AESEncryptDecryptUtility::decrypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
>>> 
>>> Trials to resolve this issue:
>>> If I build my target where I am using CryptoPP( static lib) with optimization level O1 or less, then no segfault observed. But this issue is with optimization level O2 or more.
>>> 
>>> Code snippet:
>>> std::string AESEncryptDecryptUtility::decrypt(const std::string& encrypted_text) { std::string decrypted_text; CryptoPP::AES::Decryption aesDecryption(key_.data(), KEY_LENGTH); CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv_.data()); CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decrypted_text)); stfDecryptor.Put(reinterpret_cast<const unsigned char*>(encrypted_text.c_str()), encrypted_text.size()); stfDecryptor.MessageEnd(); return decrypted_text; 
>>> 
>>> Inside StreamTransformationFilter() where it's crashing, the line highlighted in Red is pointing in GDB as the last point before the crash(segfault)
>>> 
>>> StreamTransformationFilter::StreamTransformationFilter(StreamTransformation &c, BufferedTransformation *attachment, BlockPaddingScheme padding)
>>>     : FilterWithBufferedInput(attachment), m_cipher(c), m_padding(DEFAULT_PADDING)
>>> {
>>>     CRYPTOPP_ASSERT(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() > c.MandatoryBlockSize());
>>> 
>>>     const bool authenticatedFilter = dynamic_cast<AuthenticatedSymmetricCipher *>(&c) != NULLPTR;
>>>     if (authenticatedFilter)
>>>         throw InvalidArgument("StreamTransformationFilter: please use AuthenticatedEncryptionFilter and AuthenticatedDecryptionFilter for AuthenticatedSymmetricCipher");
>>> 
>>>     // InitializeDerivedAndReturnNewSizes may override some of these
>>>     m_mandatoryBlockSize = m_cipher.MandatoryBlockSize();
>>> 
>>> Please let me know if any other information needed.
>>> 
>>> Regards,
>>> Sunandan
>>> 
>>>  
>>> -- 
>>> You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
>>> To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/e6c860f6-1e74-4372-b4de-691e0692747bn%40googlegroups.com.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
>> To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/17A2AD5B-284E-406B-8C8E-EAB3F80F85B5%40gmail.com.
> 
> -- 
> You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/CAKPYA22Gv%3Dr_HNg3j3Dom_E4yRcv6eH6sDX%2B2qbRrkT9vT4W1A%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/432B0DA5-BC99-4F43-887C-3C8BA578B9D0%40gmail.com.
smime.p7s (application/pkcs7-signature, 2.8 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.