Skip to content

Seg fault using Ruby google-protobuf v3.15.8 #8559

@stanhu

Description

@stanhu

What version of protobuf and what language are you using?
Version: v3.15.8
Language: Ruby

What operating system (Linux, Windows, ...) and version?

Linux

What runtime / compiler are you using (e.g., python version or gcc version)

$ docker run -it registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36 bash
Unable to find image 'registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36' locally
ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36: Pulling from gitlab-org/gitlab-build-images
bd8f6a7501cc: Already exists
750858b04380: Pull complete
3826b530b192: Downloading [======================>                            ]  111.2MB/242.5MB
3826b530b192: Pull complete
714f4683e9a8: Pull complete
f722c9addae9: Pull complete
3b9016f50984: Pull complete
1116e939b23c: Pull complete
da229ef1ac62: Pull complete
67025ec68add: Pull complete
2b071db8eead: Pull complete
04721e1e144e: Pull complete
08081dca5877: Pull complete
e94f33cf5d42: Pull complete
Digest: sha256:eb4fdeb3196481dd022d7d166468834e40a046b46a29e3349fb3bf3657176290
Status: Downloaded newer image for registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36
gcc --version
root@785c57d8e498:/# gcc --version
gcc (Debian 8.3.0-6) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@785c57d8e498:/# ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

What did you do?

Still working on a reproduction step, but we upgraded from google-protobuf v3.14.0 to v3.15.8 and started seeing intermiittent seg faults in CI. It looks like some issue with encoding a protobuf in gRPC.

We may need to turn on debug symbols in the protobuf.so because we aren't able to see the function and line numbers in the backtrace.

What did you expect to see

No seg fault

What did you see instead?

Seg fault

Make sure you include information that can help us debug (full error message, exception listing, stack trace, logs).

This is the relevant information from the job.log (job.log):

/builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/rpc_desc.rb:35: [BUG] Segmentation fault at 0x0000000000000000
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0204 p:---- s:1305 e:001304 CFUNC  :encode
c:0203 p:0012 s:1300 e:001299 BLOCK  /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/rpc_desc.rb:35
c:0202 p:0029 s:1296 e:001294 METHOD /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/active_call.rb:438
c:0201 p:0013 s:1285 e:001284 BLOCK  /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/client_stub.rb:347
c:0200 p:0013 s:1282 e:001281 METHOD /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/interceptors.rb:170
c:0199 p:0093 s:1275 e:001274 METHOD /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/client_stub.rb:346
c:0198 p:0070 s:1256 e:001255 BLOCK  /builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/grpc-1.30.2-x86_64-linux/src/ruby/lib/grpc/generic/service.rb:181 [FINISH]
c:0197 p:0063 s:1250 e:001249 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client.rb:177
c:0196 p:0034 s:1238 e:001237 BLOCK  /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client/call.rb:18
c:0195 p:0024 s:1235 e:001234 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client/call.rb:55
c:0194 p:0004 s:1231 e:001230 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client/call.rb:17
c:0193 p:0047 s:1224 e:001223 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client.rb:167
c:0192 p:0270 s:1212 e:001211 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/gitaly_client/commit_service.rb:351
c:0191 p:0008 s:1205 e:001204 BLOCK  /builds/gitlab-org/gitlab-foss/lib/gitlab/git/repository.rb:355
c:0190 p:0005 s:1202 e:001201 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/git/wraps_gitaly_errors.rb:7
c:0189 p:0102 s:1196 E:000ee8 METHOD /builds/gitlab-org/gitlab-foss/lib/gitlab/git/repository.rb:354 [FINISH]
c:0188 p:---- s:1189 e:001188 CFUNC  :public_send
-- C level backtrace information -------------------------------------------
/usr/local/lib/libruby.so.2.7(rb_vm_bugreport+0x562) [0x7f0f0004cb72] vm_dump.c:755
/usr/local/lib/libruby.so.2.7(rb_bug_for_fatal_signal+0xef) [0x7f0effe8029f] error.c:660
/usr/local/lib/libruby.so.2.7(sigsegv+0x52) [0x7f0efffb38b2] signal.c:946
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7f0effb82730]
/builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/google-protobuf-3.15.8-x86_64-linux/lib/google/2.7/protobuf_c.so(0x7f0ee7f123f1) [0x7f0ee7f123f1]
/builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/google-protobuf-3.15.8-x86_64-linux/lib/google/2.7/protobuf_c.so(0x7f0ee7f12ca5) [0x7f0ee7f12ca5]
/builds/gitlab-org/gitlab-foss/vendor/ruby/2.7.0/gems/google-protobuf-3.15.8-x86_64-linux/lib/google/2.7/protobuf_c.so(0x7f0ee7f09ae7) [0x7f0ee7f09ae7]
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_call_method_each_type+0xec) [0x7f0f0004441c] vm_insnhelper.c:2925
/usr/local/lib/libruby.so.2.7(vm_call_method+0x59) [0x7f0f00044bc9] vm_insnhelper.c:3026
/usr/local/lib/libruby.so.2.7(vm_call_opt_send+0x1ba) [0x7f0f0004525a] vm_insnhelper.c:2661
/usr/local/lib/libruby.so.2.7(vm_sendish+0x21) [0x7f0f00036855] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:801
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(rb_ec_vm_ptr+0x0) [0x7f0f0003d56e] vm.c:1074
/usr/local/lib/libruby.so.2.7(rb_vm_global_hooks) vm_core.h:1949
/usr/local/lib/libruby.so.2.7(invoke_bmethod) vm.c:1076
/usr/local/lib/libruby.so.2.7(invoke_iseq_block_from_c) vm.c:1119
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_proc) vm.c:1216
/usr/local/lib/libruby.so.2.7(rb_vm_invoke_bmethod) vm.c:1245
/usr/local/lib/libruby.so.2.7(vm_call_bmethod+0x93) [0x7f0f000442e3] vm_insnhelper.c:2570
/usr/local/lib/libruby.so.2.7(vm_call_method_each_type+0x30c) [0x7f0f0004463c] vm_insnhelper.c:2956
/usr/local/lib/libruby.so.2.7(vm_call_method+0x59) [0x7f0f00044bc9] vm_insnhelper.c:3026
/usr/local/lib/libruby.so.2.7(vm_call_opt_send+0x1ba) [0x7f0f0004525a] vm_insnhelper.c:2661
/usr/local/lib/libruby.so.2.7(vm_sendish+0x21) [0x7f0f00036855] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:801
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(vm_call0_body+0x1a4) [0x7f0f0003e154] vm_eval.c:136
/usr/local/lib/libruby.so.2.7(rb_vm_call0+0xaf) [0x7f0f0003e95f] vm_eval.c:52
/usr/local/lib/libruby.so.2.7(rb_vm_call_kw+0x66) [0x7f0f0003ec16] vm_eval.c:268
/usr/local/lib/libruby.so.2.7(send_internal+0x165) [0x7f0f0003f2f5] vm_eval.c:1135
/usr/local/lib/libruby.so.2.7(send_internal_kw+0x3e) [0x7f0f0003f4c0] vm_eval.c:1158
/usr/local/lib/libruby.so.2.7(rb_f_public_send) vm_eval.c:1210
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_sendish+0x22) [0x7f0f0003690c] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:782
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x9cd) [0x7f0f0003ce5d] vm.c:1929
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_bh+0x2d8) [0x7f0f00046ee8] vm.c:1044
/usr/local/lib/libruby.so.2.7(yield_under+0x1b1) [0x7f0f000473c1] vm.c:1171
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_call_method_each_type+0xec) [0x7f0f0004441c] vm_insnhelper.c:2925
/usr/local/lib/libruby.so.2.7(vm_call_method+0x59) [0x7f0f00044bc9] vm_insnhelper.c:3026
/usr/local/lib/libruby.so.2.7(vm_call_opt_send+0x1ba) [0x7f0f0004525a] vm_insnhelper.c:2661
/usr/local/lib/libruby.so.2.7(vm_sendish+0x22) [0x7f0f0003690c] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:782
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(invoke_block+0xdc) [0x7f0f0004873b] vm.c:1044
/usr/local/lib/libruby.so.2.7(invoke_iseq_block_from_c) vm.c:1116
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_bh) vm.c:1134
/usr/local/lib/libruby.so.2.7(vm_yield) vm.c:1179
/usr/local/lib/libruby.so.2.7(rb_yield_0) vm_eval.c:1227
/usr/local/lib/libruby.so.2.7(rb_yield_1) vm_eval.c:1233
/usr/local/lib/libruby.so.2.7(rb_yield) vm_eval.c:1243
/usr/local/lib/libruby.so.2.7(rb_array_len+0x0) [0x7f0effdf04d4] array.c:2135
/usr/local/lib/libruby.so.2.7(rb_ary_each) array.c:2134
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_sendish+0x22) [0x7f0f0003690c] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:782
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(invoke_block+0xdc) [0x7f0f00046aeb] vm.c:1044
/usr/local/lib/libruby.so.2.7(invoke_iseq_block_from_c) vm.c:1116
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_bh) vm.c:1134
/usr/local/lib/libruby.so.2.7(vm_yield) vm.c:1179
/usr/local/lib/libruby.so.2.7(rb_yield_0) vm_eval.c:1227
/usr/local/lib/libruby.so.2.7(catch_i) vm_eval.c:2228
/usr/local/lib/libruby.so.2.7(vm_catch_protect+0xb6) [0x7f0f000308a6] vm_eval.c:2310
/usr/local/lib/libruby.so.2.7(rb_catch_obj+0x2e) [0x7f0f000309be] vm_eval.c:2336
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_sendish+0x22) [0x7f0f0003690c] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:782
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(invoke_block+0xdc) [0x7f0f0004873b] vm.c:1044
/usr/local/lib/libruby.so.2.7(invoke_iseq_block_from_c) vm.c:1116
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_bh) vm.c:1134
/usr/local/lib/libruby.so.2.7(vm_yield) vm.c:1179
/usr/local/lib/libruby.so.2.7(rb_yield_0) vm_eval.c:1227
/usr/local/lib/libruby.so.2.7(rb_yield_1) vm_eval.c:1233
/usr/local/lib/libruby.so.2.7(rb_yield) vm_eval.c:1243
/usr/local/lib/libruby.so.2.7(rb_array_len+0x0) [0x7f0effdf04d4] array.c:2135
/usr/local/lib/libruby.so.2.7(rb_ary_each) array.c:2134
/usr/local/lib/libruby.so.2.7(vm_call_cfunc_with_frame+0x4c) [0x7f0f0002b110] vm_insnhelper.c:2514
/usr/local/lib/libruby.so.2.7(vm_call_cfunc) vm_insnhelper.c:2539
/usr/local/lib/libruby.so.2.7(vm_sendish+0x22) [0x7f0f0003690c] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:782
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(vm_call0_body+0x1a4) [0x7f0f0003e154] vm_eval.c:136
/usr/local/lib/libruby.so.2.7(rb_vm_call0+0xaf) [0x7f0f0003e95f] vm_eval.c:52
/usr/local/lib/libruby.so.2.7(rb_vm_call_kw+0x66) [0x7f0f0003ec16] vm_eval.c:268
/usr/local/lib/libruby.so.2.7(rb_method_call_with_block_kw+0x7a) [0x7f0efff5dbaa] proc.c:2291
/usr/local/lib/libruby.so.2.7(rb_vm_pop_frame+0x0) [0x7f0f000330a5] vm_insnhelper.c:3220
/usr/local/lib/libruby.so.2.7(vm_yield_with_cfunc) vm_insnhelper.c:3221
/usr/local/lib/libruby.so.2.7(vm_invoke_ifunc_block+0x53) [0x7f0f0003326c] vm_insnhelper.c:3381
/usr/local/lib/libruby.so.2.7(vm_invoke_block) vm_insnhelper.c:3421
/usr/local/lib/libruby.so.2.7(vm_invoke_block_opt_call) vm_insnhelper.c:2680
/usr/local/lib/libruby.so.2.7(vm_sendish+0x21) [0x7f0f00036855] vm_insnhelper.c:4023
/usr/local/lib/libruby.so.2.7(vm_exec_core) insns.def:801
/usr/local/lib/libruby.so.2.7(rb_vm_exec+0x156) [0x7f0f0003c5e6] vm.c:1920
/usr/local/lib/libruby.so.2.7(invoke_iseq_block_from_c+0x139) [0x7f0f0003de68] vm.c:1116
/usr/local/lib/libruby.so.2.7(invoke_block_from_c_proc) vm.c:1216
/usr/local/lib/libruby.so.2.7(vm_invoke_proc) vm.c:1238
/usr/local/lib/libruby.so.2.7(rb_vm_invoke_proc) vm.c:1259
/usr/local/lib/libruby.so.2.7(thread_do_start+0x19d) [0x7f0effff986d] thread.c:697
/usr/local/lib/libruby.so.2.7(thread_start_func_2+0x25f) [0x7f0effffba2f] thread.c:745
/usr/local/lib/libruby.so.2.7(rb_native_cond_initialize+0x0) [0x7f0effffbf7c] thread_pthread.c:969
/usr/local/lib/libruby.so.2.7(register_cached_thread_and_wait) thread_pthread.c:1021
/usr/local/lib/libruby.so.2.7(thread_start_func_1) thread_pthread.c:976
/lib/x86_64-linux-gnu/libpthread.so.0(0x7fa3) [0x7f0effb77fa3]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f0eff6084cf]

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