Closed thayol closed 1 month ago
Could post C level backtrace information which will be outputted after [BUG] Segmentation fault at ..
?
Could you post a minimum reproducible example?
Minimum reproducible example (mre):
rails new mre
cd mre
bundle exec rails server # works normally
bundle add ruby-oci8
bundle exec rails server # fails
sed -E -i 's/gem "ruby-oci8", ".*?"/gem "ruby-oci8", "= 2.2.12"/' Gemfile
bundle install
bundle exec rails server # works normally again
And the C level backtrace:
-- C level backtrace information -------------------------------------------
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_print_backtrace+0xd) [0x7fa7daede56d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_dump.c:785
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_bugreport) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_dump.c:1080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_bug_for_fatal_signal+0xf0) [0x7fa7dacd61c0] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/error.c:813
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(sigsegv+0x4b) [0x7fa7dae2df9b] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/signal.c:964
/lib64/libc.so.6(__restore_rt+0x0) [0x7fa7da97b9a0]
/home/thayol/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/ruby-oci8-2.2.13/lib/oci8lib_320.so(Init_oci8lib_320+0x412) [0x7fa7c7158df2] /home/thayol/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/ruby-oci8-2.2.13/ext/oci8/oci8lib.c:177
/home/thayol/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/ruby-oci8-2.2.13/lib/oci8lib_320.so(Init_oci8lib_320) (null):0
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(dln_load+0x124) [0x7fa7dac42d24] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/dln.c:472
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(RUBY_VM_INTERRUPTED_ANY+0x0) [0x7fa7daec0d17] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2679
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_check_ints) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_core.h:1993
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_pop_frame) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:428
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_pop_frame) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:437
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_call_cfunc) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2681
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(require_internal+0xb92) [0x7fa7dad484d2] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1209
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_require_string+0x3d) [0x7fa7dad48f4d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1294
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_alias+0x78) [0x7fa7daed7e28] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3447
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0xa0) [0x7fa7daec3101] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:820
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x5dc) [0x7fa7daec91ac] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2383
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(load_iseq_eval+0x3c) [0x7fa7dad48547] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:697
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(require_internal) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1203
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_require_string+0x3d) [0x7fa7dad48f4d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1294
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_alias+0x78) [0x7fa7daed7e28] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3447
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0xa0) [0x7fa7daec3101] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:820
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x5dc) [0x7fa7daec91ac] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2383
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(load_iseq_eval+0x3c) [0x7fa7dad48547] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:697
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(require_internal) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1203
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_require_string+0x3d) [0x7fa7dad48f4d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1294
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0xa0) [0x7fa7daec3101] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:820
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x16a) [0x7fa7daec8d3a] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2374
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_yield+0x1b2) [0x7fa7daecd5d2] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:1398
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(RB_FL_TEST_RAW+0x0) [0x7fa7dac4465c] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/array.c:2740
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(RB_FL_ANY_RAW) ./include/ruby/internal/fl_type.h:552
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_array_len) ./include/ruby/internal/core/rarray.h:321
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_ary_each) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/array.c:2739
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0x9f) [0x7fa7daec4cc7] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:801
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x16a) [0x7fa7daec8d3a] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2374
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_yield+0x1b2) [0x7fa7daecd5d2] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:1398
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(RB_FL_TEST_RAW+0x0) [0x7fa7dac4465c] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/array.c:2740
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(RB_FL_ANY_RAW) ./include/ruby/internal/fl_type.h:552
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_array_len) ./include/ruby/internal/core/rarray.h:321
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_ary_each) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/array.c:2739
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0x9f) [0x7fa7daec4cc7] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:801
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x5dc) [0x7fa7daec91ac] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2383
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(load_iseq_eval+0x3c) [0x7fa7dad48547] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:697
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(require_internal) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1203
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_require_string+0x3d) [0x7fa7dad48f4d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1294
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_alias+0x78) [0x7fa7daed7e28] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3447
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0xa0) [0x7fa7daec3101] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:820
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x5dc) [0x7fa7daec91ac] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2383
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(load_iseq_eval+0x3c) [0x7fa7dad48547] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:697
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(require_internal) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1203
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_require_string+0x3d) [0x7fa7dad48f4d] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/load.c:1294
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_cfunc_with_frame+0x117) [0x7fa7daeb3147] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3268
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_call_alias+0x78) [0x7fa7daed7e28] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:3447
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_sendish+0xa0) [0x7fa7daec3101] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm_insnhelper.c:5080
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(vm_exec_core) /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/insns.def:820
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_vm_exec+0x5dc) [0x7fa7daec91ac] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/vm.c:2383
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(rb_ec_exec_node+0xa5) [0x7fa7dacdb425] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/eval.c:289
/home/thayol/.asdf/installs/ruby/3.2.2/lib/libruby.so.3.2(ruby_run_node+0x8b) [0x7fa7dace1a8b] /tmp/ruby-build.20230830102005.264953.YNGUgP/ruby-3.2.2/eval.c:330
/home/thayol/.asdf/installs/ruby/3.2.2/bin/ruby(rb_main+0x21) [0x401102] ./main.c:38
/home/thayol/.asdf/installs/ruby/3.2.2/bin/ruby(main) ./main.c:57
/lib64/libc.so.6(__libc_start_call_main+0x7a) [0x7fa7da96514a]
/lib64/libc.so.6(__libc_start_main+0x8b) [0x7fa7da96520b]
[0x401145]
@thayol Thanks. I reproduced it with your example.
Thanks again. ruby-oci8 2.2.14 was released.
This issue was reproduced when nokogiri
is required before oci8
.
ruby -r nokogiri -roci8 -e ''
Ruby-oci8 tries to fix symbol conflict: Two shared libraries have symbols with a same name. It is done by modifying procedure linkage table entries.
Before 2.2.12, only ones in a writable memory region are checked. https://github.com/kubo/ruby-oci8/blob/ruby-oci8-2.2.12/ext/oci8/oci8lib.c#L176-L183
At 2.2.13, ones in a read-only memory region are also checked. However they cannot be modified so it causes SIGSEGV at this line. (Both libclntsh.so
depended by oci8 and nokogiri.so
have z_errmsg
.)
After 2.2.14 when they are read-only, the memory protection is modified temporarily. https://github.com/kubo/ruby-oci8/blob/ruby-oci8-2.2.14/ext/oci8/oci8lib.c#L186-L195
Thanks! ruby-oci8 2.2.14 no longer blows up on boot 🎉
I am getting the following error on starting Rails using
bundle exec rails server
:This does not happen with
ruby-oci8-2.2.12
.Versions:
Fedora Linux 39 (Workstation Edition) x86_64
Linux 6.9.11-100.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 25 18:16:24 UTC 2024 x86_64 GNU/Linux
23.5.0.24.07
(also tried with21.11.0.0.0
before)ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
Bundler version 2.5.7
ruby-oci8-2.2.13
Intel NUC13VYKi5 i5-1340P