Skip to content

Segmentation fault at class.h:463 #131

@wks

Description

@wks

https://github.com/mmtk/mmtk-ruby/actions/runs/15976163425/job/45059082124?pr=130

A test case failed with the following message:

2025-06-30T14:58:32.7095761Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:139: [BUG] Segmentation fault at 0x0000000000000048
2025-06-30T14:58:32.7185674Z ruby 3.5.0dev (2025-06-30T14:40:46Z :detached: da26980bf0) +PRISM +MMTk(Immix) [x86_64-linux]
2025-06-30T14:58:32.7186346Z 
2025-06-30T14:58:32.7186792Z -- Control frame information -----------------------------------------------
2025-06-30T14:58:32.7187827Z c:0020 p:0004 s:0143 e:000141 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:139
2025-06-30T14:58:32.7189032Z c:0019 p:0009 s:0135 e:000134 BLOCK  /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:769
2025-06-30T14:58:32.7190683Z c:0018 p:0032 s:0132 e:000131 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:447
2025-06-30T14:58:32.7191891Z c:0017 p:0018 s:0123 e:000122 BLOCK  /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:768
2025-06-30T14:58:32.7193047Z c:0016 p:0115 s:0114 E:0014c0 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:252
2025-06-30T14:58:32.7194230Z c:0015 p:0012 s:0104 E:002480 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:766
2025-06-30T14:58:32.7195616Z c:0014 p:0188 s:0096 E:000fe8 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/test/ruby/test_pattern_matching.rb:1200
2025-06-30T14:58:32.7196761Z c:0013 p:0037 s:0091 e:000090 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/testcase.rb:202
2025-06-30T14:58:32.7197886Z c:0012 p:0052 s:0085 e:000084 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/testcase.rb:170
2025-06-30T14:58:32.7199003Z c:0011 p:0093 s:0076 e:000075 BLOCK  /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1683 [FINISH]
2025-06-30T14:58:32.7199737Z c:0010 p:---- s:0069 e:000068 CFUNC  :map
2025-06-30T14:58:32.7200408Z c:0009 p:0114 s:0065 e:000064 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1670
2025-06-30T14:58:32.7201418Z c:0008 p:0035 s:0053 e:000052 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1374
2025-06-30T14:58:32.7202492Z c:0007 p:0069 s:0046 E:001dd0 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:52
2025-06-30T14:58:32.7203643Z c:0006 p:0007 s:0030 e:000029 BLOCK  /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:24 [FINISH]
2025-06-30T14:58:32.7204613Z c:0005 p:---- s:0026 e:000025 CFUNC  :map
2025-06-30T14:58:32.7205370Z c:0004 p:0005 s:0022 e:000021 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:23
2025-06-30T14:58:32.7206527Z c:0003 p:0210 s:0016 E:000b80 METHOD /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:122
2025-06-30T14:58:32.7207695Z c:0002 p:0062 s:0006 E:001eb0 EVAL   /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:220 [FINISH]
2025-06-30T14:58:32.7208514Z c:0001 p:0000 s:0003 E:000590 DUMMY  [FINISH]
2025-06-30T14:58:32.7208786Z 
2025-06-30T14:58:32.7209079Z -- Ruby level backtrace information ----------------------------------------
2025-06-30T14:58:32.7209942Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:220:in '<main>'
2025-06-30T14:58:32.7210947Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:122:in 'run'
2025-06-30T14:58:32.7211972Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:23:in '_run_suites'
2025-06-30T14:58:32.7212965Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:23:in 'map'
2025-06-30T14:58:32.7214034Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:24:in 'block in _run_suites'
2025-06-30T14:58:32.7215845Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb:52:in '_run_suite'
2025-06-30T14:58:32.7216805Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1374:in '_run_suite'
2025-06-30T14:58:32.7217686Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1670:in '_run_suite'
2025-06-30T14:58:32.7218560Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1670:in 'map'
2025-06-30T14:58:32.7219518Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit.rb:1683:in 'block in _run_suite'
2025-06-30T14:58:32.7220518Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/testcase.rb:170:in 'run'
2025-06-30T14:58:32.7221521Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/testcase.rb:202:in 'run_test'
2025-06-30T14:58:32.7222631Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/test/ruby/test_pattern_matching.rb:1200:in 'test_hash_pattern'
2025-06-30T14:58:32.7224021Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:766:in 'assert_syntax_error'
2025-06-30T14:58:32.7225417Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:252:in 'prepare_syntax_check'
2025-06-30T14:58:32.7226716Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:768:in 'block in assert_syntax_error'
2025-06-30T14:58:32.7227961Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:447:in 'assert_raise'
2025-06-30T14:58:32.7229260Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/assertions.rb:769:in 'block (2 levels) in assert_syntax_error'
2025-06-30T14:58:32.7230572Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/core_assertions.rb:139:in 'syntax_check'
2025-06-30T14:58:32.7231201Z 
2025-06-30T14:58:32.7231506Z -- Threading information ---------------------------------------------------
2025-06-30T14:58:32.7232093Z Total ractor count: 1
2025-06-30T14:58:32.7232451Z Ruby thread count for this ractor: 4
2025-06-30T14:58:32.7232725Z 
2025-06-30T14:58:32.7233016Z -- Machine register context ------------------------------------------------
2025-06-30T14:58:32.7233745Z  RIP: 0x00005596b11e860f RBP: 0x0000000000000000 RSP: 0x00007ffee87c1640
2025-06-30T14:58:32.7234573Z  RAX: 0x0000000000000000 RBX: 0x000010a100100001 RCX: 0x0000000000000000
2025-06-30T14:58:32.7235251Z  RDX: 0x00000201019ecb10 RDI: 0x000010a100100001 RSI: 0x0000000000000000
2025-06-30T14:58:32.7235926Z   R8: 0x00000200ffd349c8  R9: 0x00000201014db9e8 R10: 0x00005596dd8ef590
2025-06-30T14:58:32.7236596Z  R11: 0x00000200ffd47ef0 R12: 0x00007f0933315bb0 R13: 0x0000000000000001
2025-06-30T14:58:32.7237272Z  R14: 0x0000000000000000 R15: 0x00000000000010a1 EFL: 0x0000000000010246
2025-06-30T14:58:32.7237687Z 
2025-06-30T14:58:32.7237983Z -- C level backtrace information -------------------------------------------
2025-06-30T14:58:33.3690208Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_print_backtrace+0x8) [0x5596b1450722] ../vm_dump.c:847
2025-06-30T14:58:33.3691639Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_vm_bugreport) ../vm_dump.c:1179
2025-06-30T14:58:33.3692979Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_bug_for_fatal_signal+0x107) [0x5596b1407487] ../error.c:1146
2025-06-30T14:58:33.3694369Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(sigsegv+0x46) [0x5596b1148f86] ../signal.c:936
2025-06-30T14:58:33.3695608Z /lib/x86_64-linux-gnu/libc.so.6(0x7f0933045330) [0x7f0933045330]
2025-06-30T14:58:33.3696676Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_search_cc+0x34) [0x5596b11e860f] ../internal/class.h:463
2025-06-30T14:58:33.3698035Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_vm_search_method_slowpath) ../vm_insnhelper.c:2165
2025-06-30T14:58:33.3699481Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_search_method_slowpath0+0x5) [0x5596b11e901a] ../vm_insnhelper.c:2185
2025-06-30T14:58:33.3700916Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_search_method_fastpath) ../vm_insnhelper.c:2246
2025-06-30T14:58:33.3702208Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_sendish) ../vm_insnhelper.c:5976
2025-06-30T14:58:33.3703427Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_core+0x84) [0x5596b1201794] ../insns.def:899
2025-06-30T14:58:33.3704910Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_loop+0x38) [0x5596b11f28e8] ../vm.c:2667
2025-06-30T14:58:33.3706087Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_vm_exec) ../vm.c:2646
2025-06-30T14:58:33.3707240Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_yield_with_cref+0x4e) [0x5596b11f7334] ../vm.c:1713
2025-06-30T14:58:33.3708393Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_yield) ../vm.c:1721
2025-06-30T14:58:33.3709392Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_yield_0) ../vm_eval.c:1362
2025-06-30T14:58:33.3710410Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_yield) ../vm_eval.c:1378
2025-06-30T14:58:33.3711585Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_ary_collect+0x64) [0x5596b1339a34] ../array.c:3974
2025-06-30T14:58:33.3713444Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_call_cfunc_with_frame_+0x10d) [0x5596b11e048d] ../vm_insnhelper.c:3770
2025-06-30T14:58:33.3715372Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_sendish+0x109) [0x5596b11e8fd9] ../vm_insnhelper.c:5977
2025-06-30T14:58:33.3716728Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_core+0xeb0) [0x5596b12025c0] ../insns.def:851
2025-06-30T14:58:33.3718086Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_loop+0x38) [0x5596b11f28e8] ../vm.c:2667
2025-06-30T14:58:33.3719218Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_vm_exec) ../vm.c:2646
2025-06-30T14:58:33.3720358Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_yield_with_cref+0x4e) [0x5596b11f7334] ../vm.c:1713
2025-06-30T14:58:33.3721500Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_yield) ../vm.c:1721
2025-06-30T14:58:33.3722506Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_yield_0) ../vm_eval.c:1362
2025-06-30T14:58:33.3723747Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_yield) ../vm_eval.c:1378
2025-06-30T14:58:33.3725097Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_ary_collect+0x64) [0x5596b1339a34] ../array.c:3974
2025-06-30T14:58:33.3726554Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_call_cfunc_with_frame_+0x10d) [0x5596b11e048d] ../vm_insnhelper.c:3770
2025-06-30T14:58:33.3728026Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_sendish+0x109) [0x5596b11e8fd9] ../vm_insnhelper.c:5977
2025-06-30T14:58:33.3729400Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_core+0xeb0) [0x5596b12025c0] ../insns.def:851
2025-06-30T14:58:33.3730711Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(vm_exec_loop+0x38) [0x5596b11f28e8] ../vm.c:2667
2025-06-30T14:58:33.3731855Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_vm_exec) ../vm.c:2646
2025-06-30T14:58:33.3733041Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_ec_exec_node+0xa5) [0x5596b10131c5] ../eval.c:282
2025-06-30T14:58:33.3734339Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(ruby_run_node+0x61) [0x5596b10157f1] ../eval.c:320
2025-06-30T14:58:33.3735762Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(rb_main+0x2b) [0x5596b100fcd0] ../main.c:49
2025-06-30T14:58:33.3736846Z /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/build/ruby(main) ../main.c:69
2025-06-30T14:58:33.3737696Z /lib/x86_64-linux-gnu/libc.so.6(0x7f093302a1ca) [0x7f093302a1ca]
2025-06-30T14:58:33.3738484Z /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x8b) [0x7f093302a28b]
2025-06-30T14:58:33.3739152Z [0x5596b100fd15]
2025-06-30T14:58:33.3739469Z 
2025-06-30T14:58:33.3739899Z -- Other runtime information -----------------------------------------------
2025-06-30T14:58:33.3740479Z 
2025-06-30T14:58:33.3741293Z * Loaded script: /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/tool/lib/test/unit/parallel.rb: TestPatternMatching#test_hash_pattern
...
2025-06-30T14:58:33.7459812Z * MMTk:
2025-06-30T14:58:33.7459964Z 
2025-06-30T14:58:33.7460276Z                 mmtk_plan_name: Immix
2025-06-30T14:58:33.7460694Z                mmtk_free_bytes: 33124352
2025-06-30T14:58:33.7461096Z               mmtk_total_bytes: 60231680
2025-06-30T14:58:33.7461496Z                mmtk_used_bytes: 27107328
2025-06-30T14:58:33.7461912Z     mmtk_starting_heap_address: 0x20000000000
2025-06-30T14:58:33.7462368Z         mmtk_last_heap_address: 0x220000000000
...
2025-06-30T14:58:38.1295726Z running file: /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/test/ruby/test_pattern_matching.rb

MMTk was running the Immix plan in Release mode. If the stack trace is accurate, the segmentation fault is in RCLASS_EXT_WRITABLE in class.h.

static inline rb_classext_t *
RCLASS_EXT_WRITABLE(VALUE obj)
{
    const rb_namespace_t *ns;
    if (LIKELY(RCLASS_PRIME_CLASSEXT_WRITABLE_P(obj))) {
        return RCLASS_EXT_PRIME(obj);
    }
    // delay namespace loading to optimize for unmodified classes
    ns = rb_current_namespace();
    if (!ns || NAMESPACE_BUILTIN_P(ns)) {    // THIS LINE!
        // If no namespace is specified, Ruby VM is in bootstrap
        // and the clean class definition is under construction.
        return RCLASS_EXT_PRIME(obj);
    }
    return RCLASS_EXT_WRITABLE_LOOKUP(obj, ns);
}

The segmentation fault is at 0x0000000000000048 (72 in decimal). But NAMESPACE_BUILTIN_P(ns) reads the field at offset 120.

It is currently unclear whether ns was returned with the value -48, or the stack trace is inaccurate in terms of source code line number. I cannot reproduce this crash locally.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions