From: "coldnebo (Larry Kyrala)" Date: 2012-03-29T06:49:39+09:00 Subject: [ruby-core:43820] [ruby-trunk - Bug #6168] Segfault in OpenSSL bindings Issue #6168 has been updated by coldnebo (Larry Kyrala). File ruby-lang-6168.zip added Ok, I think I have a test case for you Martin... I was able to reproduce this again Google's IMAP server, so I created a dummy test account and a simple test case. Note: it only segfaults when in debug, I have no idea why? (is the debugger trying to tack something on to allocated buffers being passed to openssl?) Anyway, download the zip, unzip it and look at the contained error.log for a record of what I ran and how I reproduced the problem. Let me know if you have questions. ---------------------------------------- Bug #6168: Segfault in OpenSSL bindings https://bugs.ruby-lang.org/issues/6168#change-25324 Author: amasal (Nguma Abojo) Status: Assigned Priority: High Assignee: MartinBosslet (Martin Bosslet) Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Hello, A few days ago I updated my Arch Linux server to OpenSSL 1.0.1-1 and Ruby 1.9.3_p125-2. Since then I have been experiencing an odd service failure where a Ruby TLS service of mine would disconnect users with "invalid MAC" exceptions. Shortly after or even before that exception occurs, it segfaults in openssl/buffering.rb. I am not entirely sure whether this is a Ruby OpenSSL bindings bug or even an OpenSSL bug or simply a user error. This is what it prints: /usr/lib/ruby/1.9.1/openssl/buffering.rb:318: [BUG] Segmentation fault ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0016 p:---- s:0081 b:0081 l:000080 d:000080 CFUNC :syswrite c:0015 p:0181 s:0077 b:0077 l:000076 d:000076 METHOD /usr/lib/ruby/1.9.1/openssl/buffering.rb:318 c:0014 p:0030 s:0068 b:0068 l:000067 d:000067 METHOD /usr/lib/ruby/1.9.1/openssl/buffering.rb:415 c:0013 p:0046 s:0063 b:0063 l:000062 d:000062 METHOD /usr/lib/ruby/1.9.1/nil/communication.rb:87 c:0012 p:0011 s:0057 b:0057 l:000051 d:000056 BLOCK /home/void/code/warehouse/notification/NotificationClient.rb:29 c:0011 p:0019 s:0055 b:0055 l:000054 d:000054 METHOD :10 c:0010 p:0013 s:0052 b:0052 l:000051 d:000051 METHOD /home/void/code/warehouse/notification/NotificationClient.rb:29 c:0009 p:0088 s:0048 b:0048 l:000047 d:000047 METHOD /home/void/code/warehouse/notification/NotificationServer.rb:200 c:0008 p:---- s:0039 b:0039 l:000038 d:000038 FINISH c:0007 p:---- s:0037 b:0037 l:000036 d:000036 CFUNC :call c:0006 p:0218 s:0032 b:0032 l:000031 d:000031 METHOD /home/void/code/warehouse/notification /NotificationServer.rb:185 c:0005 p:0146 s:0023 b:0023 l:000022 d:000022 METHOD /home/void/code/warehouse/notification /NotificationServer.rb:162 c:0004 p:0171 s:0014 b:0014 l:000013 d:000013 METHOD /home/void/code/warehouse/notification /NotificationServer.rb:139 c:0003 p:0012 s:0006 b:0006 l:000118 d:000005 BLOCK /home/void/code/warehouse/notification /NotificationServer.rb:102 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP -- Ruby level backtrace information ---------------------------------------- /home/void/code/warehouse/notification/NotificationServer.rb:102:in `block in runServer' /home/void/code/warehouse/notification/NotificationServer.rb:139:in `handleClient' /home/void/code/warehouse/notification/NotificationServer.rb:162:in `processClientCommunication' /home/void/code/warehouse/notification/NotificationServer.rb:185:in `processClientInput' /home/void/code/warehouse/notification/NotificationServer.rb:185:in `call' /home/void/code/warehouse/notification/NotificationServer.rb:200:in `rpcHandler' /home/void/code/warehouse/notification/NotificationClient.rb:29:in `sendData' :10:in `synchronize' /home/void/code/warehouse/notification/NotificationClient.rb:29:in `block in sendData' /usr/lib/ruby/1.9.1/nil/communication.rb:87:in `sendData' /usr/lib/ruby/1.9.1/openssl/buffering.rb:415:in `print' /usr/lib/ruby/1.9.1/openssl/buffering.rb:318:in `do_write' /usr/lib/ruby/1.9.1/openssl/buffering.rb:318:in `syswrite' -- C level backtrace information ------------------------------------------- /usr/lib/libruby.so.1.9(+0x158ee9) [0x7f3aa715fee9] /usr/lib/libruby.so.1.9(+0x59f99) [0x7f3aa7060f99] /usr/lib/libruby.so.1.9(rb_bug+0xb7) [0x7f3aa70619c7] /usr/lib/libruby.so.1.9(+0xf945f) [0x7f3aa710045f] /lib/libc.so.6(+0x349f0) [0x7f3aa6c9a9f0] /usr/lib/libcrypto.so.1.0.0(RC4+0x431) [0x7f3aa4db6c31] -- http://bugs.ruby-lang.org/