Project

General

Profile

Actions

Bug #5139

closed

sigsegv のスタックオーバフロー

Added by nagachika (Tomoyuki Chikanaga) about 10 years ago. Updated about 10 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
-
Backport:
[ruby-dev:44315]

Description

現在の trunk が Linux で test_segv_test(TestRubyOptions) が Failure になります。

$ ruby -e 'Process.kill :SEGV, $$'

のように実行すると表示されるはずのバックトレースや LOADED FEATURES の情報が表示されないためです。

おそらく r32751 からだと思うのですが、手元の環境(Ubuntu 10.4, Kernel 2.6.32-33-generic, gcc 4.4.3) では
どうやら sigsegv() から呼ばれている rb_vm_bugreport() で sigaltstack で設定したシグナルハンドラ用スタックを
オーバフローして、シグナルハンドラ内で再度 SEGV していると思います。

以下 gdb での実行の抜粋
(gdb) run -e 'Process.kill 11, $$'
Program received signal SIGSEGV, Segmentation fault.
0x0012d422 in __kernel_vsyscall ()
(gdb) c
Continuing.
-e:1: [BUG] Segmentation fault
ruby 1.9.4dev (2011-08-01 trunk 32793) [i686-linux]
------------ snip -----------

  • Loaded features:

Program received signal SIGSEGV, Segmentation fault.
0x08150864 in rb_vm_bugreport () at ../ruby/vm_dump.c:834
834 for (i=0; iloaded_features); i++) {
(gdb) p ruby_current_thread->altstack
$5 = (void *) 0x8221ab8
(gdb) p $esp
$6 = (void *) 0x8220560
(gdb) p $esp - ruby_current_thread->altstack
$7 = -5464
(gdb) up
#1 0x08187095 in report_bug (file=0x82480b0 "-e", line=1,
fmt=0x81c3bcb "Segmentation fault", args=0x8222714 "\263\063")
at ../ruby/error.c:265
265 rb_vm_bugreport();
(gdb) p (char *)$esp - (char *)ruby_current_thread->altstack
$15 = -5144
(gdb) up
#2 0x08187121 in rb_bug (fmt=0x81c3bcb "Segmentation fault")
at ../ruby/error.c:284
284 report_bug(file, line, fmt, args);
(gdb) p (char *)$esp - (char *)ruby_current_thread->altstack
$16 = 3112

$esp と ruby_current_thread->altstack の関係をみてオーバフローではないかと思ったのですがどうでしょう。
なお sigaltstack に渡しているスタックサイズは 4096 です。


Related issues

Related to Ruby master - Bug #7141: ALT_STACK_SIZE is not enoughClosedkosaki (Motohiro KOSAKI)10/11/2012Actions
Actions

Also available in: Atom PDF