Project

General

Profile

Actions

Bug #17583

closed

Segfault on large stack(RUBY_THREAD_VM_STACK_SIZE)

Added by yoshiokatsuneo (Tsuneo Yoshioka) about 3 years ago. Updated over 1 year ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
[ruby-core:102249]

Description

When I set large stack size like 100MB using RUBY_THREAD_VM_STACK_SIZE,
I get the segmentation fault.
The error looks happens when RUBY_THREAD_VM_STACK_SIZE is larger than around 17MB.

How to reproduce:

$ RUBY_THREAD_VM_STACK_SIZE=17000000 ruby -e ''  

Output:

# RUBY_THREAD_VM_STACK_SIZE=17000000 ruby -e ''  
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so: [BUG] Segmentation fault at 0x0000000000000048
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0002 p:-972860 s:0006 e:000005 TOP    [FINISH]
c:0001 p:0000 s:0003 E:0008e0 (none) [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x00007f9a84541143 RBP: 0x0000000000000051 RSP: 0x00007ffca756efe8
 RAX: 0x0000000000000000 RBX: 0x000000000070bf98 RCX: 0x000000000000080c
 RDX: 0x0000000000000000 RDI: 0x000000000070bf98 RSI: 0x0000000000000000
  R8: 0x0000000000000000  R9: 0xd0f4b751468f8b02 R10: 0x0000000000000000
 R11: 0x3f3c0feefeb77f71 R12: 0x0000000000773a00 R13: 0x00000000006cc8f0
 R14: 0x000000000070bf98 R15: 0x00000000000000f3 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_print_backtrace+0x14) [0x7f9a8478c33f] vm_dump.c:758
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(bug_report_end+0x0) [0x7f9a845b0d73] error.c:786
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_bug_for_fatal_signal) error.c:786
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(sigsegv+0x51) [0x7f9a846e5e71] signal.c:960
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7f9a844933c0] ../sysdeps/pthread/funlockfile.c:28
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_freeze_singleton_class+0x13) [0x7f9a84541143] class.c:1865
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_obj_freeze_inline+0x23) [0x7f9a84651934] ./include/ruby/internal/fl_type.h:466
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_obj_freeze) object.c:1281
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rbimpl_fl_set_raw_raw+0x0) [0x7f9a845999ae] encoding.c:125
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(RB_FL_SET_RAW) ./include/ruby/internal/fl_type.h:298
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_new) encoding.c:126
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_list_update) encoding.c:137
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_register_at) encoding.c:392
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_encdb_replicate+0xc9bd8) [0x7f9a8459a605]
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_encdb_replicate) encoding.c:612
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so(Init_encdb+0x5c1) [0x7f9a844cb731] ./encdb.h:101
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so(Init_encdb) (null):0
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(dln_load+0xf8) [0x7f9a84505588] dln.c:1374
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_vm_call_cfunc+0x11a) [0x7f9a84775b6a] vm.c:2466
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(require_internal+0x3ae) [0x7f9a846155ee] load.c:1071
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_require_internal+0x45) [0x7f9a84615845] load.c:1133
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(Init_enc+0x12) [0x7f9a847993a2] dmyenc.c:7
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(process_options+0x20e59b) [0x7f9a846de2f6] ruby.c:1840
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_process_options) ruby.c:2571
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_options+0x1a2) [0x7f9a845bb862] eval.c:138
/usr/local/rbenv/versions/3.0.0/bin/ruby(main+0x55) [0x4011e5] ./main.c:50

-- Other runtime information -----------------------------------------------

* Loaded script: ruby

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 ruby2_keywords.rb

* Process memory map:

00400000-00401000 r--p 00000000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00401000-00402000 r-xp 00001000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00402000-00403000 r--p 00002000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00403000-00404000 r--p 00002000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00404000-00405000 rw-p 00003000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
0064b000-00790000 rw-p 00000000 00:00 0                                  [heap]
7f9a7d5e7000-7f9a7e679000 r--s 00000000 fe:01 942375                     /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.31.so
7f9a7e679000-7f9a7e869000 r--s 00000000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a7e869000-7f9a7eadd000 r--s 00000000 fe:01 942368                     /usr/lib/debug/.build-id/4f/c5fc33f4429136a494c640b113d76f610e4abc.debug
7f9a7eadd000-7f9a7eb04000 r--s 00000000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a7eb04000-7f9a7f2dc000 rw-p 00000000 00:00 0 
7f9a7f2dc000-7f9a7fb5a000 r--s 00000000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a7fb5a000-7f9a7fb5d000 r--p 00000000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb5d000-7f9a7fb6f000 r-xp 00003000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb6f000-7f9a7fb73000 r--p 00015000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb73000-7f9a7fb74000 r--p 00018000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb74000-7f9a7fb75000 rw-p 00019000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb87000-7f9a7fb88000 ---p 00000000 00:00 0 
7f9a7fb88000-7f9a7fc29000 rw-p 00000000 00:00 0 
7f9a7fc29000-7f9a7fc2a000 ---p 00000000 00:00 0 
7f9a7fc2a000-7f9a7fccb000 rw-p 00000000 00:00 0 
7f9a7fccb000-7f9a7fccc000 ---p 00000000 00:00 0 
7f9a7fccc000-7f9a7fd6d000 rw-p 00000000 00:00 0 
7f9a7fd6d000-7f9a7fd6e000 ---p 00000000 00:00 0 
7f9a7fd6e000-7f9a7fe0f000 rw-p 00000000 00:00 0 
7f9a7fe0f000-7f9a7fe10000 ---p 00000000 00:00 0 
7f9a7fe10000-7f9a7feb1000 rw-p 00000000 00:00 0 
7f9a7feb1000-7f9a7feb2000 ---p 00000000 00:00 0 
7f9a7feb2000-7f9a7ff53000 rw-p 00000000 00:00 0 
7f9a7ff53000-7f9a7ff54000 ---p 00000000 00:00 0 
7f9a7ff54000-7f9a7fff5000 rw-p 00000000 00:00 0 
7f9a7fff5000-7f9a7fff6000 ---p 00000000 00:00 0 
7f9a7fff6000-7f9a80097000 rw-p 00000000 00:00 0 
7f9a80097000-7f9a80098000 ---p 00000000 00:00 0 
7f9a80098000-7f9a80139000 rw-p 00000000 00:00 0 
7f9a80139000-7f9a8013a000 ---p 00000000 00:00 0 
7f9a8013a000-7f9a801db000 rw-p 00000000 00:00 0 
7f9a801db000-7f9a801dc000 ---p 00000000 00:00 0 
7f9a801dc000-7f9a8027d000 rw-p 00000000 00:00 0 
7f9a8027d000-7f9a8027e000 ---p 00000000 00:00 0 
7f9a8027e000-7f9a8031f000 rw-p 00000000 00:00 0 
7f9a8031f000-7f9a80320000 ---p 00000000 00:00 0 
7f9a80320000-7f9a803c1000 rw-p 00000000 00:00 0 
7f9a803c1000-7f9a803c2000 ---p 00000000 00:00 0 
7f9a803c2000-7f9a80463000 rw-p 00000000 00:00 0 
7f9a80463000-7f9a80464000 ---p 00000000 00:00 0 
7f9a80464000-7f9a80505000 rw-p 00000000 00:00 0 
7f9a80505000-7f9a80506000 ---p 00000000 00:00 0 
7f9a80506000-7f9a805a7000 rw-p 00000000 00:00 0 
7f9a805a7000-7f9a805a8000 ---p 00000000 00:00 0 
7f9a805a8000-7f9a80649000 rw-p 00000000 00:00 0 
7f9a80649000-7f9a8064a000 ---p 00000000 00:00 0 
7f9a8064a000-7f9a806eb000 rw-p 00000000 00:00 0 
7f9a806eb000-7f9a806ec000 ---p 00000000 00:00 0 
7f9a806ec000-7f9a8078d000 rw-p 00000000 00:00 0 
7f9a8078d000-7f9a8078e000 ---p 00000000 00:00 0 
7f9a8078e000-7f9a8082f000 rw-p 00000000 00:00 0 
7f9a8082f000-7f9a80830000 ---p 00000000 00:00 0 
7f9a80830000-7f9a808d1000 rw-p 00000000 00:00 0 
7f9a808d1000-7f9a808d2000 ---p 00000000 00:00 0 
7f9a808d2000-7f9a80973000 rw-p 00000000 00:00 0 
7f9a80973000-7f9a80974000 ---p 00000000 00:00 0 
7f9a80974000-7f9a80a15000 rw-p 00000000 00:00 0 
7f9a80a15000-7f9a80a16000 ---p 00000000 00:00 0 
7f9a80a16000-7f9a80ab7000 rw-p 00000000 00:00 0 
7f9a80ab7000-7f9a80ab8000 ---p 00000000 00:00 0 
7f9a80ab8000-7f9a80b59000 rw-p 00000000 00:00 0 
7f9a80b59000-7f9a80b5a000 ---p 00000000 00:00 0 
7f9a80b5a000-7f9a80bfb000 rw-p 00000000 00:00 0 
7f9a80bfb000-7f9a80bfc000 ---p 00000000 00:00 0 
7f9a80bfc000-7f9a80c9d000 rw-p 00000000 00:00 0 
7f9a80c9d000-7f9a80c9e000 ---p 00000000 00:00 0 
7f9a80c9e000-7f9a80d3f000 rw-p 00000000 00:00 0 
7f9a80d3f000-7f9a80d40000 ---p 00000000 00:00 0 
7f9a80d40000-7f9a80de1000 rw-p 00000000 00:00 0 
7f9a80de1000-7f9a80de2000 ---p 00000000 00:00 0 
7f9a80de2000-7f9a80e83000 rw-p 00000000 00:00 0 
7f9a80e83000-7f9a80e84000 ---p 00000000 00:00 0 
7f9a80e84000-7f9a80f25000 rw-p 00000000 00:00 0 
7f9a80f25000-7f9a80f26000 ---p 00000000 00:00 0 
7f9a80f26000-7f9a8406b000 rw-p 00000000 00:00 0 
7f9a8406b000-7f9a84090000 r--p 00000000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84090000-7f9a84208000 r-xp 00025000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84208000-7f9a84252000 r--p 0019d000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84252000-7f9a84253000 ---p 001e7000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84253000-7f9a84256000 r--p 001e7000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84256000-7f9a84259000 rw-p 001ea000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84259000-7f9a8425d000 rw-p 00000000 00:00 0 
7f9a8425d000-7f9a8426c000 r--p 00000000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a8426c000-7f9a84313000 r-xp 0000f000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a84313000-7f9a843aa000 r--p 000b6000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843aa000-7f9a843ab000 r--p 0014c000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843ab000-7f9a843ac000 rw-p 0014d000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843ac000-7f9a843ae000 r--p 00000000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843ae000-7f9a843c3000 r-xp 00002000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843c3000-7f9a843dd000 r--p 00017000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843dd000-7f9a843de000 r--p 00030000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843de000-7f9a843df000 rw-p 00031000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843df000-7f9a843e9000 rw-p 00000000 00:00 0 
7f9a843e9000-7f9a843ea000 r--p 00000000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ea000-7f9a843ec000 r-xp 00001000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ec000-7f9a843ed000 r--p 00003000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ed000-7f9a843ee000 r--p 00003000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ee000-7f9a843ef000 rw-p 00004000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ef000-7f9a843f9000 r--p 00000000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a843f9000-7f9a84459000 r-xp 0000a000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84459000-7f9a84470000 r--p 0006a000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84470000-7f9a84471000 ---p 00081000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84471000-7f9a84472000 r--p 00081000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84472000-7f9a84473000 rw-p 00082000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84473000-7f9a84476000 r--p 00000000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a84476000-7f9a8447a000 r-xp 00003000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447a000-7f9a8447b000 r--p 00007000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447b000-7f9a8447c000 ---p 00008000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447c000-7f9a8447d000 r--p 00008000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447d000-7f9a8447e000 rw-p 00009000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447e000-7f9a84485000 r--p 00000000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a84485000-7f9a84496000 r-xp 00007000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a84496000-7f9a8449b000 r--p 00018000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449b000-7f9a8449c000 r--p 0001c000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449c000-7f9a8449d000 rw-p 0001d000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449d000-7f9a844a1000 rw-p 00000000 00:00 0 
7f9a844a1000-7f9a844a3000 r--p 00000000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844a3000-7f9a844b4000 r-xp 00002000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844b4000-7f9a844ba000 r--p 00013000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844ba000-7f9a844bb000 ---p 00019000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844bb000-7f9a844bc000 r--p 00019000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844bc000-7f9a844bd000 rw-p 0001a000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844c0000-7f9a844c5000 r--s 00000000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844c5000-7f9a844ca000 r--s 00000000 fe:01 5111                       /usr/local/rbenv/versions/3.0.0/bin/ruby
7f9a844ca000-7f9a844cb000 r--p 00000000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cb000-7f9a844cc000 r-xp 00001000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cc000-7f9a844cd000 r--p 00002000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cd000-7f9a844ce000 r--p 00002000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844ce000-7f9a844cf000 rw-p 00003000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cf000-7f9a84500000 r--p 00000000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84500000-7f9a8479a000 r-xp 00031000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8479a000-7f9a84892000 r--p 002cb000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84892000-7f9a84893000 ---p 003c3000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84893000-7f9a8489a000 r--p 003c3000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8489a000-7f9a8489d000 rw-p 003ca000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8489d000-7f9a848b0000 rw-p 00000000 00:00 0 
7f9a848b0000-7f9a848b1000 r--p 00000000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848b1000-7f9a848d4000 r-xp 00001000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848d4000-7f9a848dc000 r--p 00024000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848dd000-7f9a848de000 r--p 0002c000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848de000-7f9a848df000 rw-p 0002d000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848df000-7f9a848e0000 rw-p 00000000 00:00 0 
7ffc6a4e4000-7ffca7573000 rw-p 00000000 00:00 0                          [stack]
7ffca75e1000-7ffca75e4000 r--p 00000000 00:00 0                          [vvar]
7ffca75e4000-7ffca75e6000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


Aborted

I confirmed that the problem happens on both Ubuntu 20.04 and macOS(Big Sur/11.1) .


Related issues 1 (0 open1 closed)

Has duplicate Ruby master - Bug #17668: Large RUBY_THREAD_VM_STACK_SIZE causes segmentation fault (again)ClosedActions
Actions #1

Updated by yoshiokatsuneo (Tsuneo Yoshioka) about 3 years ago

  • ruby -v changed from 3.0.0 to ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
Actions #3

Updated by yoshiokatsuneo (Tsuneo Yoshioka) about 3 years ago

  • Description updated (diff)

Updated by nobu (Nobuyoshi Nakada) about 3 years ago

Seems mark_object_ary broken?
This should be the array of arrays.

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
    frame #0: 0x00000001007698a9 miniruby`lookup_method_table(klass=108645493675760, id=3281) at vm_method.c:699:33
   696 	lookup_method_table(VALUE klass, ID id)
   697 	{
   698 	    st_data_t body;
-> 699 	    struct rb_id_table *m_tbl = RCLASS_M_TBL(klass);
   700 	
   701 	    if (rb_id_table_lookup(m_tbl, id, &body)) {
   702 		return (rb_method_entry_t *) body;
Target 0: (miniruby) stopped.
(lldb) p ruby_current_vm_ptr->mark_object_ary
(VALUE) $0 = 108645493686200
(lldb) rp ruby_current_vm_ptr->mark_object_ary
bits [     ]
T_ARRAY: len=1 (ownership) capa=128
(const VALUE *) $2 = 0x0000619000001e80 {
  (const VALUE) [0] = 0x000062d0000ebf68
}
(lldb) rp $2[0]
bits [     ]
T_STRING: (const char [73]) $4 = "  def self.verify_compaction_references(toward: nil, double_heap: false)\n"

Updated by xtkoba (Tee KOBAYASHI) about 3 years ago

The crash threshold of RUBY_THREAD_VM_STACK_SIZE seems to coincide with the default value of GC_MALLOC_LIMIT_MIN (which is 16MB).

I think something is messed up by GC in an early stage of initialization. In fact, the crash seems to disappear when the function garbage_collect is made to do nothing other than returning TRUE.

Updated by ko1 (Koichi Sasada) about 3 years ago

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)

Updated by xtkoba (Tee KOBAYASHI) about 3 years ago

Bug #17668 seems to be a duplicate of this bug.

As I wrote in #note-5, this issue seems to be caused by running GC during initialization. If so, a straightforward workaround would be to suppress GC during init:

--- a/eval.c
+++ b/eval.c
@@ -99,6 +99,8 @@
     return state;
 }
 
+extern int suppress_garbage_collection;
+
 /*!
  * Calls ruby_setup() and check error.
  *
@@ -107,6 +109,7 @@
 void
 ruby_init(void)
 {
+    suppress_garbage_collection = 1;
     int state = ruby_setup();
     if (state) {
         if (RTEST(ruby_debug))
@@ -365,6 +368,7 @@
 int
 ruby_run_node(void *n)
 {
+    suppress_garbage_collection = 0;
     rb_execution_context_t *ec = GET_EC();
     int status;
     if (!ruby_executable_node(n, &status)) {
--- a/gc.c
+++ b/gc.c
@@ -8214,11 +8214,15 @@
 #endif
 }
 
+int suppress_garbage_collection;
+
 static int
 garbage_collect(rb_objspace_t *objspace, int reason)
 {
     int ret;
 
+    if (suppress_garbage_collection) return TRUE;
+
     RB_VM_LOCK_ENTER();
     {
 #if GC_PROFILE_MORE_DETAIL

An alternative workaround would be to set GC_ENABLE_LAZY_SWEEP to 0, but this is not good because it disables lazy sweeping throughout the entire lifecycle. It would be better if we could suppress lazy sweeping during initialization only.

Actions #8

Updated by jeremyevans0 (Jeremy Evans) about 3 years ago

  • Has duplicate Bug #17668: Large RUBY_THREAD_VM_STACK_SIZE causes segmentation fault (again) added

Updated by jeremyevans0 (Jeremy Evans) almost 3 years ago

nobu (Nobuyoshi Nakada) wrote in #note-9:

Does this work?
https://github.com/nobu/ruby/tree/disable-gc-while-VM-bootsrap

@nobu (Nobuyoshi Nakada) I tested it and it fixes the problem on OpenBSD/amd64.

Updated by jeremyevans0 (Jeremy Evans) over 2 years ago

nobu (Nobuyoshi Nakada) wrote in #note-9:

Does this work?
https://github.com/nobu/ruby/tree/disable-gc-while-VM-bootsrap

Since it worked for me, I rebased this tree on master and submitted a pull request for it: https://github.com/ruby/ruby/pull/4617

Actions #12

Updated by nobu (Nobuyoshi Nakada) over 2 years ago

  • Status changed from Assigned to Closed

Applied in changeset git|8ebb5e23ebc5f1675e3479b9a29f124dc458226b.


Keep GC disabled until VM bootstrap has done [Bug #17583]

Updated by ciel (T Yamada) over 2 years ago

Hi, could you backport this to Ruby 3.0?

Actions #14

Updated by hsbt (Hiroshi SHIBATA) over 1 year ago

  • Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN to 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: REQUIRED

Updated by usa (Usaku NAKAMURA) over 1 year ago

  • Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: REQUIRED to 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: DONE

mergerd into ruby_3_0 at 5fb3cf4

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0