From ef0fd25270800cdfa943ea46c3fc08fb8cdda2cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 10 Feb 2022 13:41:14 +0100 Subject: [PATCH] Prevent segfaults running with SystemTap. Resolves: rhbz#2015441 --- ...ery-RubyVM-FrozenCore-for-class-path.patch | 43 +++++++++++++++++++ ruby.spec | 11 +++++ 2 files changed, 54 insertions(+) create mode 100644 ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch new file mode 100644 index 0000000..f32f306 --- /dev/null +++ b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch @@ -0,0 +1,43 @@ +From 0ade5611df9f981005eed32b369d1e699e520221 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 10 Feb 2022 13:26:44 +0100 +Subject: [PATCH] Don't query `RubyVM::FrozenCore` for class path. + +The `RubyVM::FrozenCore` class path is corrupted during GC cycle and +returns random garbage, which might result in segfault. + +But since it is easy to detect the `RubyVM::FrozenCore`, just provide +the class path explicitly as a workaround. + +Other possibility would be to ignore `RubyVM::FrozenCore` simlarly as +TracePoint API does: + +https://github.com/ruby/ruby/blob/46f6575157d4c2f6bbd5693896e26a65037e5552/vm_trace.c#L411 +--- + vm.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/vm.c b/vm.c +index 8ce8b279d4..3d189fa63a 100644 +--- a/vm.c ++++ b/vm.c +@@ -446,7 +446,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, + } + type = BUILTIN_TYPE(klass); + if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { +- VALUE name = rb_class_path(klass); ++ VALUE name = Qnil; ++ /* ++ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. ++ * https://bugs.ruby-lang.org/issues/18257 ++ */ ++ if (klass == rb_mRubyVMFrozenCore) ++ name = rb_str_new_cstr("RubyVM::FrozenCore"); ++ else ++ name = rb_class_path(klass); + const char *classname, *filename; + const char *methodname = rb_id2name(id); + if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { +-- +2.34.1 + diff --git a/ruby.spec b/ruby.spec index 668e420..928801a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -138,6 +138,12 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch +# Prevent segfaults running with SystemTap due to `RubyVM::FrozenCore` being +# corrupted by GC. +# https://bugzilla.redhat.com/show_bug.cgi?id=2015441 +# https://bugzilla.redhat.com/show_bug.cgi?id=1986206 +# https://bugs.ruby-lang.org/issues/18257 +Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch # Fix DWARF5 support. # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 @@ -676,6 +682,7 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 @@ -1459,6 +1466,10 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Feb 10 2022 Vít Ondruch - 3.0.3-159 +- Prevent segfaults running with SystemTap. + Resolves: rhbz#2015441 + * Tue Jan 25 2022 Vít Ondruch - 3.0.3-159 - Update OpenSSL 3 compatibility patches. Resolves: rhbz#1952925