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