https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112014-01-26T19:26:10ZRuby Issue Tracking SystemRuby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=446072014-01-26T19:26:10Zkyrylo (Kyrylo Silin)silin@kyrylo.org
<ul><li><strong>File</strong> <a href="/attachments/4212">bug9454.txt</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/4212/bug9454.txt">bug9454.txt</a> added</li></ul><p>Here's the log with the segfault.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=446092014-01-26T23:19:39Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>Seems an infinite recursion, obviously.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=446112014-01-27T00:31:42Zkyrylo (Kyrylo Silin)silin@kyrylo.org
<ul></ul><p>Sure. As far as I understand it should raise a <em>SystemStackError</em> instead of segfaulting (that's how it worked before <em>v2.1.0p0</em>). If you could give me a hint, which file is relevant, I would probably come up with a patch (I don't promise anything, because I'm not very good at C and Ruby internals).</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=446132014-01-27T01:01:22Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>At first glan.ce, it occurred in <code>INSNS_DISPATCH()</code> macro.<br>
Considering that the second case works fine, maybe recovery jump fails.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=446322014-01-27T12:53:57Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>Applied in changeset r44712.</p>
<hr>
<p>thread_pthread.c: get current main thread stack size</p>
<ul>
<li>thread_pthread.c: get current main thread stack size, which may<br>
be expanded than allocated size at initialization, by rlimit().<br>
<a href="/issues/9454">[ruby-core:60113]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: The define_method(:class) segfault (Closed)" href="https://redmine.ruby-lang.org/issues/9454">#9454</a>]</li>
</ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=447252014-01-30T05:22:59Znormalperson (Eric Wong)normalperson@yhbt.net
<ul></ul><p>Btw, TestException#test_machine_stackoverflow_by_define_method fails<br>
on an ancient glibc 2.5-42.el5_4.3 (CentOS 5.4 x86_64).</p>
<p>I think this is a bug in pthread_getattr_np when it is run on the main<br>
thread. I'm not sure how many people care about a platform this old,<br>
though; and I've been meaning to upgrade that anyways.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=460552014-04-03T09:17:00ZReiOdaira (Rei Odaira)Rei.Odaira@gmail.com
<ul></ul><p>FYI, <code>TestException#test_machine_stackoverflow_by_define_method</code> fails on my environment, too: Linux 2.6.32-71.el6.x86_64 and glibc 2.12-1.7.el6.</p>
<pre><code>$ ruby -v
ruby 2.2.0dev (2014-04-01 trunk 45498) [x86_64-linux]
</code></pre>
<p>The problem is that <code>pthread_attr_getstack()</code> and even <code>getrlimit()</code> return 0xa00000 (= 10 MB) as a max stack size, but the actual stack size at the time of the stack overflow seems bigger by about 2 MB, according to /proc/PID/maps.</p>
<pre><code>7fe1f7664000-7fe1f7afe000 rw-p 00000000 00:00 0 [heap]
7fffc0836000-7fffc1435000 rw-p 00000000 00:00 0 [stack]
7fffc15d4000-7fffc15d5000 r-xp 00000000 00:00 0 [vdso]
</code></pre>
<p>0x7fffc1435000 - 0x7fffc1435000 = 0xbff000 (= ~12 MB). As a result, the address causing SIGSEGV is not considered as part of the stack.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=468962014-05-27T03:52:10Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-4 status-5 priority-4 priority-default closed" href="/issues/9828">Backport #9828</a>: Segfault instead of stack overflow</i> added</li></ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=472312014-06-15T06:18:40Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/9945">Bug #9945</a>: Segmentation fault when defining recursive method</i> added</li></ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=472782014-06-19T04:57:39Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN</i> to <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: REQUIRED</i></li></ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=473022014-06-19T15:58:00Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: REQUIRED</i> to <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: DONE</i></li></ul><p>r44712, r44715, r44716, r44722, r44725, r44726 and r44753 were backported into <code>ruby_2_1</code> branch at r46468.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=475832014-07-03T04:37:33Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: DONE</i> to <i>1.9.3: UNKNOWN, 2.0.0: DONE, 2.1: DONE</i></li></ul><p>backported into <code>ruby_2_0_0</code> at r46667 and r46669.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=475892014-07-03T15:18:31Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: DONE, 2.1: DONE</i> to <i>1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: DONE</i></li></ul><p>... but reverted because it introduced SEGV on CentOS.<br>
Maybe somthing is missed, but I wasn't able to find it.</p> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=489062014-09-14T15:29:29Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/10218">Bug #10218</a>: 手続きを再帰するとSegmentation faultが発生する</i> added</li></ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=518172015-03-10T02:55:10Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/10955">Bug #10955</a>: invoke_block_from_c segfault</i> added</li></ul> Ruby master - Bug #9454: The define_method(:class) segfaulthttps://redmine.ruby-lang.org/issues/9454?journal_id=710442018-03-16T20:16:02Zwanabe (_ wanabe)s.wanabe@gmail.com
<ul><li><strong>Related to</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/14387">Bug #14387</a>: Ruby 2.5 を Alpine Linux で実行すると比較的浅めで SystemStackError 例外になる</i> added</li></ul>