[#25936] [Bug:1.9] [rubygems] $LOAD_PATH includes bin directory — Nobuyoshi Nakada <nobu@...>

Hi,

10 messages 2009/10/05

[#25943] Disabling tainting — Tony Arcieri <tony@...>

Would it make sense to have a flag passed to the interpreter on startup that

16 messages 2009/10/05

[#26028] [Bug #2189] Math.atanh(1) & Math.atanh(-1) should not raise an error — Marc-Andre Lafortune <redmine@...>

Bug #2189: Math.atanh(1) & Math.atanh(-1) should not raise an error

14 messages 2009/10/10

[#26222] [Bug #2250] IO::for_fd() objects' finalization dangerously closes underlying fds — Mike Pomraning <redmine@...>

Bug #2250: IO::for_fd() objects' finalization dangerously closes underlying fds

11 messages 2009/10/22

[#26244] [Bug #2258] Kernel#require inside rb_require() inside rb_protect() inside SysV context fails — Suraj Kurapati <redmine@...>

Bug #2258: Kernel#require inside rb_require() inside rb_protect() inside SysV context fails

24 messages 2009/10/22

[#26361] [Feature #2294] [PATCH] ruby_bind_stack() to embed Ruby in coroutine — Suraj Kurapati <redmine@...>

Feature #2294: [PATCH] ruby_bind_stack() to embed Ruby in coroutine

42 messages 2009/10/27

[#26371] [Bug #2295] segmentation faults — tomer doron <redmine@...>

Bug #2295: segmentation faults

16 messages 2009/10/27

[ruby-core:26270] [Bug #2258] Kernel#require inside rb_require() inside rb_protect() inside SysV context fails

From: Suraj Kurapati <redmine@...>
Date: 2009-10-24 07:38:01 UTC
List: ruby-core #26270
Issue #2258 has been updated by Suraj Kurapati.


Hi,

I debugged the segfault during Kernel#require inside
rb_require() inside rb_protect() inside a SysV context,
and found that the culprit is gc_mark_locations().

It is processing (and corrupting) a small portion of
the SysV context's stack space, regardless of whether
the stack space is statically or dynamically allocated,
as shown in the GDB output below.

Notice that the "start" argument for gc_mark_locations()
is within ruby_context.uc_ss_sp and ss_sp + ss_size.

To solve this problem, I will try to add a function in
Ruby's C API that tells Ruby the boundaries of its stack.

This is strangely reminiscent of my feature request #2126.
I suppose my experiments and discoveries so far provide
make a case for exposing stack functions in the Ruby C API.

Thanks for your consideration.

###############################################################
# Statically allocated SysV context stack
###############################################################

(gdb) p ruby_context.uc_stack
$19 = {ss_sp = 0x82032a0, ss_flags = 0, ss_size = 4194304}

(gdb) p /x ruby_context.uc_stack.ss_sp + ruby_context.uc_stack.ss_size
$18 = 0x86032a0

(gdb) f
#1  0x08071bf8 in gc_mark_locations (objspace=0x86114f0, start=0x8601680, end=0xbffff1f0) at gc.c:1328

###############################################################
# Dynamically allocated SysV context stack
###############################################################

(gdb) p ruby_context.uc_stack
$15 = {ss_sp = 0xb79f6008, ss_flags = 0, ss_size = 4194304}

(gdb) p /x ruby_context.uc_stack.ss_sp + ruby_context.uc_stack.ss_size
$16 = 0xb7df6008

(gdb) f
#1  0x08071c00 in gc_mark_locations (objspace=0x82114f0, start=0xb7df4430, end=0xbffff1f0) at gc.c:1328

----------------------------------------
http://redmine.ruby-lang.org/issues/show/2258

----------------------------------------
http://redmine.ruby-lang.org

In This Thread