[ruby-core:74970] [Ruby trunk Bug#12290] Possible segfault with Thread#name=

From: nagachika00@...
Date: 2016-04-15 16:07:21 UTC
List: ruby-core #74970
Issue #12290 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONE

ruby_2_3 r54607 merged revision(s) 54598,54600.

----------------------------------------
Bug #12290: Possible segfault with Thread#name=
https://bugs.ruby-lang.org/issues/12290#change-58097

* Author: Herwin .
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290)
* Backport: 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONE
----------------------------------------
Ruby 2.3 added a Thread#name=, which may segfault when used incorrectly. This little program:

```ruby
class SubClassedThread < Thread
  def initialize()
    self.name = 'foo'
    super do
      yield
    end
  end
end

SubClassedThread.new {}
```

Causes a segfault with both Ruby 2.3 (ruby 2.3.0p0 (2015-12-25 revision 53290)) and ruby-2.4.0-dev (ruby 2.4.0dev (2016-04-15 trunk 54594)). Moving the line that assignes the name in the block passed to super resolves the issue. Even thought there is a workaround, it shouldn't be possible to trigger a segfault from a script imho.

The relevant lines of the backtrace

```
/lib/i386-linux-gnu/i686/cmov/libpthread.so.0(pthread_setname_np+0x50) [0xf739ded0]
ruby(rb_thread_setname+0x95) [0xf755dc85] thread.c:2797
```

The system is a default Debian Jessie (32bit), with libc version 2.19-18+deb8u4.

---Files--------------------------------
issue12290_segthread_thread_name.diff (486 Bytes)
issue12290_segthread_thread_name.diff (393 Bytes)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next