Hi Everyone,

We are catching an uninitialized read finding using Valgrind Git
Master. The head of the finding is shown below.

I suspect it is a valid finding but it kind of strikes me as odd that
x86_64 without any -march or -m options is using SSE4. In fact, we
build without -march and -m options because that's how distros want
it.

It feels like I should work on the capabilities problem first rather
than chasing the uninitialized read. I can envision a situation where
some component assumes a higher ISA is available so it performs an
operation on a data structure that should not happen.

My question is, where should I begin to look for the root cause? Is
this STL or libstdc++? Or maybe glibc?

**********

Here's how all files are compiled.

$ make valgrind -j 10
g++ -DNDEBUG -g3 -O1 -fPIC -pthread -pipe -DCRYPTOPP_VALGRIND -c cryptlib.cpp
g++ -DNDEBUG -g3 -O1 -fPIC -pthread -pipe -DCRYPTOPP_VALGRIND -c cpu.cpp
g++ -DNDEBUG -g3 -O1 -fPIC -pthread -pipe -DCRYPTOPP_VALGRIND -c integer.cpp
...

**********

Testing SymmetricCipher algorithm Salsa20.
......==2518== Conditional jump or move depends on uninitialised value(s)
==2518==    at 0x4C34C26: __memcmp_sse4_1 (vg_replace_strmem.c:1099)
==2518==    by 0x48B435: compare (char_traits.h:310)
==2518==    by 0x48B435:
__gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type
std::operator==<char>(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (basic_string.h:6006)
==2518==    by 0x4F8BAD: operator!=<char, std::char_traits<char>,
std::allocator<char> > (basic_string.h:6045)
==2518==    by 0x4F8BAD:
CryptoPP::Test::TestSymmetricCipher(std::map<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::less<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > >&, CryptoPP::NameValuePairs const&)
(datatest.cpp:514)
...

**********

And here is the data test that is failing. Its a torture test, and the
"r131072" say "create a string that is 128KB of all 0's":

Key: 0F62B5085BAE0154A7FA4DA0F34699EC3F92E5388BDE3184D72A7DD02376C91C
IV: 288FF65DC42B92F9
Plaintext: r131072 00
CiphertextXorDigest: E00EBCCD70D69152725F9987982178A2 ... (32 byte omitted)
Test: EncryptXorDigest

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to