Issue #10626 has been updated by Jarosaw Rzesztko.


Some more findings, you can run the above test case under gdb like this:

~~~
# gdb ruby
(gdb) set disable-randomization off
(gdb) run test.rb
~~~

The test program does not crash with randomization disabled in gdb, nor does it crash when run under valgrind. Where the program crashes varies from run to run, sometimes it does not crash at all. At the assembly level, it always crashes on this call:

~~~
call   0xb75169a0 <__x86.get_pc_thunk.bx>
~~~

Which is basically (http://gcc.gnu.org/ml/gcc-help/2010-12/msg00131.html):

~~~
movl (%esp), %e##reg;
~~~

And indeed, in info registers I get for example:

~~~
esp            0xbfc08fe0       0xbfc08fe0
~~~

And then:

~~~
(gdb) x 0xbfc08fe0
0xbfc08fe0:     Cannot access memory at address 0xbfc08fe0
~~~

So the stack pointer is somehow broken. In this case the start of the stackis:

~~~
(gdb) proc stat
...
Start of stack: 0xbfc3cd90
~~~

Doing the math, the stack in total occupies:

~~~
((0xbfc3cd90 - 0xbfc08fe0) words * 4 bytes) / 1024 bytes = 829 kbytes
~~~

Which is way lower than the default ulimit -s of 8192 bytes.

----------------------------------------
Bug #10626: BUS error from nesting lambda's and calls to methods defined with define_method
https://bugs.ruby-lang.org/issues/10626#change-50545

* Author: Jarosaw Rzesztko
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: 2.1.5
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I get a BUS error from executing the following Ruby program: https://gist.github.com/jaroslawr/8579678d7c68a49208f0

I am on Gentoo Linux and Ruby 2.1.5, and have also tried Ruby 2.1.4, 2.1.3,..., down to 2.1.0. My colleagues The problem seems to lie in rapidly consuming stack space, and goes away when the stack size limit is increased with ulimit -s. For the real world context behind this, see the corresponding Rails issue I opened:

https://github.com/rails/rails/issues/18011



-- 
https://bugs.ruby-lang.org/