https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2011-08-02T10:23:38Z
Ruby Issue Tracking System
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19960
2011-08-02T10:23:38Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>nagachika (Tomoyuki Chikanaga)</i></li></ul><p>こちらの環境(debian, 2.6.39-2-amd64, gcc-4.6.1)では再現しないのですが、gdbの結果を見る限りではそのようですね。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19961
2011-08-02T10:43:07Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Assignee</strong> changed from <i>nagachika (Tomoyuki Chikanaga)</i> to <i>kosaki (Motohiro KOSAKI)</i></li><li><strong>Target version</strong> changed from <i>1.9.3</i> to <i>1.9.4</i></li></ul><p>えっと、問題のコミットを入れたのはわたしなので、わたしが確認するべきと思います。<br>
担当者を変更します。<br>
また、問題のコミットは193ブランチには入れてないのでターゲットバージョンも変更します。<br>
お手数をおかけして申し訳ありません。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19967
2011-08-02T10:59:53Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul></ul><p>すみませんターゲットバージョンは 1.9.3 にも入ったと勘違いしてました。</p>
<p>それから ALT_STACK_SIZE を (SIGSTKSZ*2) (手元だと 16KB)に戻してやりなおしてみましたところ、<br>
チケットの説明文に書いたような $esp のオーバフローはしていないのに vm_backtrace_each() で SEGV していたので<br>
ちょっと別の問題が(も?)あるようです。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19969
2011-08-02T11:59:05Z
Anonymous
<ul></ul><blockquote>
<p>すみませんターゲットバージョンは 1.9.3 にも入ったと勘違いしてました。</p>
<p>それから ALT_STACK_SIZE を (SIGSTKSZ*2) (手元だと 16KB)に戻してやりなおしてみましたところ、<br>
チケットの説明文に書いたような $esp のオーバフローはしていないのに vm_backtrace_each() で SEGV していたので<br>
ちょっと別の問題が(も?)あるようです。</p>
</blockquote>
<p>中田さんの報告だとディストリ依存があるようなので、テストしたディストリとkernel, glibcのバージョンを<br>
教えてもらえますでしょうか。<br>
最近ちょっと忙しいので遅くなるかもしれませんが見てみます。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19971
2011-08-02T13:11:51Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul><li><strong>Target version</strong> changed from <i>1.9.4</i> to <i>1.9.3</i></li></ul><p>試した環境は 2つあります。</p>
<p>A) Ubuntu 10.04.03<br>
$ uname -srvm<br>
Linux 2.6.32-33-generic #70-Ubuntu SMP Thu Jul 7 21:09:46 UTC 2011 i686<br>
$ gcc --version<br>
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3<br>
Copyright (C) 2009 Free Software Foundation, Inc.<br>
This is free software; see the source for copying conditions. There is NO<br>
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>
<p>$ /lib/libc.so.6 --version<br>
GNU C Library (Ubuntu EGLIBC 2.11.1-0ubuntu7.8) stable release version 2.11.1, by Roland McGrath et al.<br>
Copyright (C) 2009 Free Software Foundation, Inc.<br>
This is free software; see the source for copying conditions.<br>
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A<br>
PARTICULAR PURPOSE.<br>
Compiled by GNU CC version 4.4.3.<br>
Compiled on a Linux >>2.6.24-27-server<< system on 2011-01-21.<br>
Available extensions:<br>
crypt add-on version 2.1 by Michael Glad and others<br>
GNU Libidn by Simon Josefsson<br>
Native POSIX Threads Library by Ulrich Drepper et al<br>
BIND-8.2.3-T5B<br>
For bug reporting instructions, please see:<br>
<a href="http://www.debian.org/Bugs/" class="external">http://www.debian.org/Bugs/</a>.</p>
<p>B) Red Hat Enterprise Linux ES release 4 (Nahant Update 8)<br>
$ uname -srvmp<br>
Linux 2.6.9-89.ELlargesmp #1 SMP Mon Apr 20 10:43:12 EDT 2009 x86_64 x86_64<br>
$ gcc-4.5 --version # configure --with-gcc で gcc-4.5 を指定<br>
gcc-4.5 (GCC) 4.5.1<br>
Copyright (C) 2010 Free Software Foundation, Inc.<br>
This is free software; see the source for copying conditions. There is NO<br>
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>
<p>$ /lib/libc.so.6 --version<br>
GNU C Library stable release version 2.3.4, by Roland McGrath et al.<br>
Copyright (C) 2005 Free Software Foundation, Inc.<br>
This is free software; see the source for copying conditions.<br>
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A<br>
PARTICULAR PURPOSE.<br>
Compiled by GNU CC version 3.4.6 20060404 (Red Hat 3.4.6-10).<br>
Compiled on a Linux 2.4.20 system on 2009-01-09.<br>
Available extensions:<br>
GNU libio by Per Bothner<br>
crypt add-on version 2.1 by Michael Glad and others<br>
linuxthreads-0.10 by Xavier Leroy<br>
The C stubs add-on version 2.1.2.<br>
BIND-8.2.3-T5B<br>
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk<br>
Glibc-2.0 compatibility add-on by Cristian Gafton<br>
GNU Libidn by Simon Josefsson<br>
libthread_db work sponsored by Alpha Processor Inc<br>
Thread-local storage support included.<br>
For bug reporting instructions, please see:<br>
<a href="http://www.gnu.org/software/libc/bugs.html" class="external">http://www.gnu.org/software/libc/bugs.html</a>.</p>
<p>それぞれについて -O0 と -O3 でビルドしたもので -e 'Process.kill :SEGV, $$' を実行すると</p>
<p>(A)/-O0 => "[BUG]" まで表示して SEGV<br>
(A)/-O3 => "[BUG]" まで表示して SEGV<br>
(B)/-O0 => 再現せず(最後まで表示して abort で終了)<br>
(B)/-O3 => "C level backtrace information" のバナーまで表示して SEGV</p>
<p>また (B) で ruby_1_9_3 のブランチの HEAD を -O3 でビルドしてみたところ<br>
(B)/-O3, 1.9.3 => "C level backtrace information" のバナーまで表示して SEGV<br>
でした。<br>
やはりスタックサイズだけが原因ではないみたいで 1.9.3 でも発生するのでバージョン 1.9.3 にしておきます。</p>
<p>手が空いたらもうちょっと条件を整理したいですが、とりあえず以上です。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=19995
2011-08-02T22:08:46Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>This issue was solved with changeset r32815.<br>
Tomoyuki, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<ul>
<li>
<p>gc.c (init_heap): allocate sigaltstack after heaps are allocated.<br>
<a href="/issues/5139">[ruby-dev:44315]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: sigsegv のスタックオーバフロー (Closed)" href="https://redmine.ruby-lang.org/issues/5139">#5139</a>]</p>
</li>
<li>
<p>vm.c (thread_free): use free because objspace is not ready.</p>
</li>
<li>
<p>vm.c (th_init): use malloc because objspace is not ready.</p>
</li>
</ul>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20004
2011-08-03T00:33:23Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Assigned</i></li></ul>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20016
2011-08-03T09:00:35Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>とりあえず r32815, r32821 にて boron では直ったんですが、chikanagaさんの環境ではどうですかね。<br>
<a href="http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/recent.html" class="external">http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/recent.html</a></p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20017
2011-08-03T09:23:07Z
akr (Akira Tanaka)
akr@fsij.org
<ul><li><strong>ruby -v</strong> changed from <i>ruby 1.9.4dev (2011-08-01 trunk 32793) [i686-linux]</i> to <i>-</i></li></ul><p>2011年8月3日9:00 Yui NARUSE <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<p>とりあえず r32815, r32821 にて boron では直ったんですが、chikanagaさんの環境ではどうですかね。<br>
<a href="http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/recent.html" class="external">http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/recent.html</a></p>
</blockquote>
<h2>この issue 自体とは関係なくてなんですが、recent.html は内容がどんどん変わっていくページなので、<br>
<a href="http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20110802T231900Z.diff.html.gz" class="external">http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20110802T231900Z.diff.html.gz</a><br>
みたいな、変化したところを直接参照しておいた方が、<br>
もし将来調べる羽目になった時に面倒がないんではないかと思います。</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20018
2011-08-03T09:26:15Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul></ul><p>(A) の 32bit マシンでは最新版の trunk で直っていました。<br>
しかし (B) の x86_64 -O3 つきではやはり "C level backtrace information" まで表示して SEGV しています。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20024
2011-08-03T11:43:39Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>Tomoyuki Chikanaga wrote:</p>
<blockquote>
<p>(A) の 32bit マシンでは最新版の trunk で直っていました。<br>
しかし (B) の x86_64 -O3 つきではやはり "C level backtrace information" まで表示して SEGV しています。</p>
</blockquote>
<p>B) Red Hat Enterprise Linux ES release 4 (Nahant Update 8) って、r32751 より前ではきちんと動いてました?</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20029
2011-08-03T12:29:38Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul></ul><p>(B) の -O3 では確かに r32749 でも、その前の r32748 でも同じエラーが出ていました。<br>
すみません、(B) の -O3 はしばらく test-all を流していなかったので気がついてませんでしたが、<br>
2011/05/01 の r31399 まで遡ってもまだ発生するので、この環境ではだいぶ前からこの問題があったみたいです。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20034
2011-08-03T19:13:33Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>RHEL4はもうplatform のほうがEOLなので深追いするだけ無駄だと思います。closeしましょう。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20037
2011-08-03T19:29:48Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul></ul><p>最新 trunk で RHEL4 で2度目の SEGV しているのは backtrace() の中とかなので glibc 古すぎとかかもしれません。</p>
<p>(gdb) where<br>
#0 0x0000003feff07f2c in _Unwind_FindEnclosingFunction ()<br>
from /lib64/libgcc_s.so.1<br>
#1 0x0000003feff08e37 in _Unwind_Backtrace () from /lib64/libgcc_s.so.1<br>
#2 0x0000003fed8db3df in backtrace () from /lib64/tls/libc.so.6<br>
#3 0x0000000000531556 in rb_vm_bugreport () at ../ruby/vm_dump.c:40<br>
#4 0x000000000057b866 in report_bug (file=Variable "file" is not available.<br>
) at ../ruby/error.c:245<br>
#5 0x0000203a313a652d in ?? ()<br>
<a class="issue tracker-1 status-5 priority-4 priority-default closed behind-schedule" title="Bug: sprintf() of %f on Windows(MSVCRT) (Closed)" href="https://redmine.ruby-lang.org/issues/6">#6</a> 0x0000000000000000 in ?? ()</p>
<p>ところで r32815 はメインスレッドの altstack を init_head() 後に確保しなおしているようですが、<br>
なぜこれで直るのかというのがわかりません。もうしわけないのですが解説して頂けませんか。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20042
2011-08-03T23:46:12Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>Tomoyuki Chikanaga wrote:</p>
<blockquote>
<p>ところで r32815 はメインスレッドの altstack を init_head() 後に確保しなおしているようですが、<br>
なぜこれで直るのかというのがわかりません。もうしわけないのですが解説して頂けませんか。</p>
</blockquote>
<p>なんででしょうねぇ。<br>
力尽くで探索して求めた位置なので、よくわからんです。</p>
<p>結局heapとaltstackの位置関係が変わっているのがキモだとは思うんですが。<br>
なお、メインスレッドしかない場合th_initの方のaltstack確保は必要ないので、<br>
むしろメインスレッドはinit_heap以降じゃないとダメだってのがこれの結論です。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20071
2011-08-04T13:44:55Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul></ul><blockquote>
<p>結局heapとaltstackの位置関係が変わっているのがキモだとは思うんですが。<br>
うーん、ということは altstack の位置が変わったためにスタックオーバフローしてもたまたま実害がなくなって現象が収まったということではないでしょうか。</p>
</blockquote>
<p>なぜこんなにスタック使うのかというのを調べてみると、rb_bug() から呼ばれる report_bug() で<br>
char buf[BUFSIZ];<br>
とバッファをスタック上に確保しているためのようでした。<br>
ためしに<br>
static char buf[BUFSIZ];<br>
に変更して r32815 と r32821 を revert したバージョンでやってみても現象は収まりました。(buf を static に宣言していいかちゃんと考察していないので、とりあえず、ですが)</p>
<p>report_bug のスタック消費量を抑えるか、altstack のサイズを拡張するかするのがいいのではないかと思います。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20072
2011-08-04T13:45:54Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul><li><strong>Target version</strong> changed from <i>1.9.3</i> to <i>1.9.4</i></li></ul><p>あと 1.9.3 で起きてたのは RHEL4 だけだったのでターゲットバージョンは再度 1.9.4 に戻します。お騒がせしてすみませんでした。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20074
2011-08-04T14:05:04Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Assigned</i></li></ul><p>BUFSIZを使ってるのが根本的に間違っているという認識なので、もっと小さくしようと思います。メッセージサイズとなんの関係もない定数じゃないかっ。<br>
ちなみにBUFSIZはMacでは1024, Linuxでは8096のようです。</p>
Ruby master - Bug #5139: sigsegv のスタックオーバフロー
https://redmine.ruby-lang.org/issues/5139?journal_id=20090
2011-08-04T20:23:19Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>This issue was solved with changeset r32844.<br>
Tomoyuki, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<ul>
<li>error.c (report_bug): use a small message buffer instead of BUFSIZ.<br>
It is needed for avoiding nested SIGSEGV on Linux.<br>
Note: BUFSIZ is not proper buffer size. It's unrelated with maximum<br>
filename length. :-/<br>
[Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: sigsegv のスタックオーバフロー (Closed)" href="https://redmine.ruby-lang.org/issues/5139">#5139</a>] <a href="/issues/5139">[ruby-dev:44315]</a></li>
</ul>