<div dir="ltr">I do not have a simple test case, I find this when running my applications test suite and it occurs in about one in 10,000 runs.<div><br></div><div>Here is another stack trace:</div><div><br></div><div><div>

#1  0x00000000005c7cfe in GlobalSignalTermHandler (sig=11) at Param.cpp:1422</div><div>#2  <signal handler called></div><div>#3  0x00000000006e324c in reverse_bytes (val=<optimized out>) at build/include/botan/bswap.h:89</div>

<div>#4  load_be<unsigned long long> (off=<optimized out>, in=<optimized out>) at build/include/botan/loadstor.h:203</div><div>#5  Botan::(anonymous namespace)::SHA2_64::compress (digest=..., input=0x2a916000 <Address 0x2a916000 out of bounds>, blocks=144115188075855871) at src/hash/sha2_64/sha2_64.cpp:61</div>

<div>#6  0x00000000006e75cb in Botan::SHA_512::compress_n (this=<optimized out>, input=0xff25457799f258bf <Address 0xff25457799f258bf out of bounds>, blocks=3642481287135357789) at src/hash/sha2_64/sha2_64.cpp:214</div>

<div>#7  0x00000000006de46c in Botan::MDx_HashFunction::add_data (this=0x1d266070, input=0x1d253200 "h \345  [\231\177\204", length=<optimized out>) at src/hash/mdx_hash/mdx_hash.cpp:62</div><div>#8  0x000000000078023e in update (length=<optimized out>, in=<optimized out>, this=0x7ef0b70dc689e162) at build/include/botan/buf_comp.h:33</div>

<div>#9  Botan::HMAC::add_data (this=<optimized out>, input=0xff25457799f258bf <Address 0xff25457799f258bf out of bounds>, length=3642481287135357789) at src/mac/hmac/hmac.cpp:19</div><div>#10 0x00000000007d742e in update (length=<optimized out>, in=<optimized out>, this=0x7ef0b70dc689e162) at build/include/botan/buf_comp.h:33</div>

<div>#11 Botan::Entropy_Accumulator_BufferedComputation::add_bytes (this=<optimized out>, bytes=0xff25457799f258bf <Address 0xff25457799f258bf out of bounds>, length=3642481287135357789) at build/include/botan/entropy_src.h:113</div>

<div>#12 0x000000000080a53d in add (entropy_bits_per_byte=<optimized out>, length=18446744073709551615, bytes=<optimized out>, this=<optimized out>) at build/include/botan/entropy_src.h:72</div><div>#13 Botan::Device_EntropySource::poll (this=<optimized out>, accum=...) at src/entropy/dev_random/dev_random.cpp:96</div>

<div>#14 0x00000000007d611f in Botan::HMAC_RNG::reseed (this=0x1d1ea5a0, poll_bits=128) at src/rng/hmac_rng/hmac_rng.cpp:86</div><div>#15 0x00000000007d704c in Botan::HMAC_RNG::randomize (this=0x1d1ea5a0, out=0x1d2531c0 "\371DA\266\223\066[`\"i\026a\177\360", <incomplete sequence \360>, length=0) at src/rng/hmac_rng/hmac_rng.cpp:59</div>

<div>#16 0x00000000007d7c77 in random_vec (bytes=<optimized out>, this=0x1d1ea5a0) at build/include/botan/rng.h:43</div><div>#17 Botan::ANSI_X931_RNG::update_buffer (this=0x1d1fa780) at src/rng/x931_rng/x931_rng.cpp:43</div>

<div>#18 0x00000000007d8c71 in Botan::ANSI_X931_RNG::randomize (this=0x1d1fa780, out=0x2b8386d28997 "", length=1) at src/rng/x931_rng/x931_rng.cpp:25</div><div>#19 0x000000000077c512 in Botan::(anonymous namespace)::Serialized_PRNG::randomize (this=0x1d1bcde0, out=0x2b8386d28997 "", len=1) at src/libstate/global_rng.cpp:119</div>

<div>#20 0x00000000005c9d22 in Botan::AutoSeeded_RNG::randomize (this=0x1d1c21a0, out=0x2b8386d28997 "", len=1) at ../../src/Botan/build/include/botan/auto_rng.h:24</div><div>#21 0x000000000071a5fb in Botan::RandomNumberGenerator::next_byte (this=0x7ef0b70dc689e162) at src/rng/rng.cpp:22</div>

<div>#22 0x00000000005c5ffe in random::generate () at Param.cpp:1864</div></div><div><br></div><div>I will try the patch and see if the crash goes away.  I am able to get this in the debugger when it happens, but not easily strace since that would mean using strace thousands of time until it failed.  Is there anything more I can get from the debugger to help or any change to apply to the code to provide more info when this case occurs?</div>

<div><br></div><div>Thanks.</div><div><br></div><div>-William</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 6, 2014 at 6:54 AM, Jack Lloyd <span dir="ltr"><<a href="mailto:lloyd@randombit.net" target="_blank">lloyd@randombit.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
The /dev/random reader did change in 1.10.7. I've been unable to replicate<br>
this crash but from the backtrace I do see a flow that would cause a crash<br>
if read() on the device returns an error.<br>
<br>
If you have any ability to repliacate this issue it would be great if<br>
you could strace the process and find the exact error that is being<br>
returned. Likely it is EAGAIN or similiar as we are using non-blocking<br>
reads, so if select returns readable and then in the intervening time<br>
some other process drains the /dev/random pool that would trigger this<br>
bug.<br>
<br>
This patch should fix the crash:<br>
<br>
#<br>
# old_revision [7f0a8fd7748331d87d6ec9ae013459e4c02c75e8]<br>
#<br>
# patch "src/entropy/dev_random/dev_random.cpp"<br>
#  from [cb24a224755a8464707182e5c3fbd5a92f4c3c6b]<br>
#    to [bf6aae02a86ec7a5f2ac82ca6493078e1d7fdb19]<br>
#<br>
============================================================<br>
--- src/entropy/dev_random/dev_random.cpp       cb24a224755a8464707182e5c3fbd5a92f4c3c6b<br>
+++ src/entropy/dev_random/dev_random.cpp       bf6aae02a86ec7a5f2ac82ca6493078e1d7fdb19<br>
@@ -93,7 +93,9 @@ void Device_EntropySource::poll(Entropy_<br>
       if(FD_ISSET(devices[i], &read_set))<br>
          {<br>
          const ssize_t got = ::read(devices[i], &io_buffer[0], io_buffer.size());<br>
-         accum.add(&io_buffer[0], got, ENTROPY_BITS_PER_BYTE);<br>
+<br>
+         if(got > 0)<br>
+            accum.add(&io_buffer[0], got, ENTROPY_BITS_PER_BYTE);<br>
<div><div class="h5">          }<br>
       }<br>
    }<br>
<br>
On Mon, Feb 03, 2014 at 03:57:29PM -0800, William K. Foster wrote:<br>
> Hello,<br>
><br>
> I recently updated from Botan v1.10.5 to v1.10.7 and I've seen a SEGV that<br>
> is not easily reproducible in the RNG constructor:<br>
><br>
> #1  0x00000000005c794e in GlobalSignalTermHandler (sig=11) at Param.cpp:1422<br>
> #2  <signal handler called><br>
> #3  0x00000000006e4bdc in Botan::(anonymous<br>
> namespace)::SHA2_64::compress(Botan::MemoryRegion<unsigned long long>&,<br>
> unsigned char const*, unsigned long) ()<br>
> #4  0x00000000006dfd3f in Botan::MDx_HashFunction::add_data(unsigned char<br>
> const*, unsigned long) ()<br>
> #5  0x000000000080da34 in<br>
> Botan::Device_EntropySource::poll(Botan::Entropy_Accumulator&) ()<br>
> #6  0x00000000007d168e in Botan::HMAC_RNG::reseed(unsigned long) ()<br>
> #7  0x00000000007d4c9e in Botan::ANSI_X931_RNG::reseed(unsigned long) ()<br>
> #8  0x000000000077ade4 in<br>
> Botan::Library_State::make_global_rng(Botan::Algorithm_Factory&,<br>
> Botan::Mutex*) ()<br>
> #9  0x00000000006eac6b in Botan::Library_State::global_rng() ()<br>
> #10 0x00000000005cd2fb in Botan::AutoSeeded_RNG::AutoSeeded_RNG<br>
> (this=0x7fff204511d0) at ../../src/Botan/build/include/botan/auto_rng.h:40<br>
><br>
> The calling code is doing a default constructor of an RNG:<br>
><br>
>     Botan::AutoSeeded_RNG rng;<br>
><br>
> This usually works, but on occasion I get a SEGV.<br>
><br>
> Could this be related to changes between v1.10.5 and v1.10.7?<br>
><br>
> Thanks.<br>
><br>
> -William<br>
<br>
</div></div>> _______________________________________________<br>
> botan-devel mailing list<br>
> <a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a><br>
> <a href="http://lists.randombit.net/mailman/listinfo/botan-devel" target="_blank">http://lists.randombit.net/mailman/listinfo/botan-devel</a><br>
<br>
_______________________________________________<br>
botan-devel mailing list<br>
<a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a><br>
<a href="http://lists.randombit.net/mailman/listinfo/botan-devel" target="_blank">http://lists.randombit.net/mailman/listinfo/botan-devel</a><br>
</blockquote></div><br></div>