[ruby-core:113056] [Ruby master Bug#19554] Invalid memory access detected by Valgrind when using Fibers
From:
"mdalessio (Mike Dalessio) via ruby-core" <ruby-core@...>
Date:
2023-03-30 23:31:17 UTC
List:
ruby-core #113056
Issue #19554 has been updated by mdalessio (Mike Dalessio).
I'm just here to support Peter's take: Valgrind is a very useful tool for C extension maintainers to find and prevent illegal memory access. It's been an incredibly valuable tool for me over the ~15 years I've been a maintainer, and is a key tool in Nokogiri's CI pipelines.
ASan is also useful! But because it's a build-time option, it's slightly less useful for debugging production builds. If it's not too difficult, I think Ruby should support both tools.
----------------------------------------
Bug #19554: Invalid memory access detected by Valgrind when using Fibers
https://bugs.ruby-lang.org/issues/19554#change-102594
* Author: peterzhu2118 (Peter Zhu)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
This issue was originally reported here: https://github.com/Shopify/ruby_memcheck/issues/14
Running the script shown below using `valgrind --trace-children=yes --num-callers=500 ruby test.rb` outputs a lot of invalid memory access errors. I've shown a few sample errors below.
I am able to reproduce this issue on the master branch (commit [1e9a218ade](https://github.com/ruby/ruby/commit/1e9a218ade3af90c18f42e3fea08e2fcea81222a)), 3.2, 3.1, 3.0.
```ruby
require "bundler/inline"
gemfile do
source "https://rubygems.org"
gem "graphql"
end
module Example
class FooType < GraphQL::Schema::Object
field :id, ID, null: false
end
class FooSource < GraphQL::Dataloader::Source
def fetch(ids)
ids
end
end
class QueryType < GraphQL::Schema::Object
field :foo, Example::FooType do
argument :foo_id, GraphQL::Types::ID, required: false, loads: Example::FooType
end
def foo(foo: nil); end
end
class Schema < GraphQL::Schema
query Example::QueryType
use GraphQL::Dataloader
def self.object_from_id(id, ctx)
ctx.dataloader.with(Example::FooSource).request(id)
end
end
end
Example::Schema.execute(<<-GRAPHQL)
{
foo(fooId: "Other") {
id
}
}
GRAPHQL
```
```
==203957== Use of uninitialised value of size 8
==203957== at 0x3453FD: vm_exec_core (vm.inc:4411)
==203957== by 0x357EFB: rb_vm_exec (vm.c:2366)
==203957== by 0x354E44: invoke_block (vm.c:1384)
==203957== by 0x355759: invoke_iseq_block_from_c (vm.c:1440)
==203957== by 0x355759: invoke_block_from_c_proc (vm.c:1538)
==203957== by 0x355759: vm_invoke_proc (vm.c:1568)
==203957== by 0x355DF4: rb_vm_invoke_proc (vm.c:1589)
==203957== by 0x48F695: rb_fiber_start (cont.c:2513)
==203957== by 0x48CCF8: fiber_entry (cont.c:831)
==203957==
==203957== Invalid write of size 8
==203957== at 0x48C407: fiber_pool_stack_reset (cont.c:325)
==203957== by 0x48C4E9: fiber_pool_vacancy_reset (cont.c:364)
==203957== by 0x48CBB0: fiber_pool_stack_release (cont.c:752)
==203957== by 0x48CECF: fiber_stack_release (cont.c:874)
==203957== by 0x48FC9F: fiber_switch (cont.c:2726)
==203957== by 0x4901F9: fiber_resume_kw (cont.c:2906)
==203957== by 0x490235: rb_fiber_resume_kw (cont.c:2912)
==203957== by 0x4903B7: rb_fiber_m_resume (cont.c:2973)
==203957== by 0x3337D6: ractor_safe_call_cfunc_m1 (vm_insnhelper.c:3166)
==203957== by 0x33440A: vm_call_cfunc_with_frame_ (vm_insnhelper.c:3357)
==203957== by 0x3345E1: vm_call_cfunc_with_frame (vm_insnhelper.c:3385)
==203957== by 0x3398E5: vm_sendish (vm_insnhelper.c:5225)
==203957== by 0x341203: vm_exec_core (insns.def:835)
==203957== by 0x357EFB: rb_vm_exec (vm.c:2366)
==203957== by 0x354E44: invoke_block (vm.c:1384)
==203957== by 0x355759: invoke_iseq_block_from_c (vm.c:1440)
==203957== by 0x355759: invoke_block_from_c_proc (vm.c:1538)
==203957== by 0x355759: vm_invoke_proc (vm.c:1568)
==203957== by 0x355DF4: rb_vm_invoke_proc (vm.c:1589)
==203957== by 0x48F695: rb_fiber_start (cont.c:2513)
==203957== by 0x48CCF8: fiber_entry (cont.c:831)
==203957== Address 0x9bad008 is in a rw- anonymous segment
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/