From b6241b20bcf435e3f80ac493bfefba06dcf2abd5 Mon Sep 17 00:00:00 2001 From: normal Date: Mon, 23 Oct 2017 21:50:08 +0000 Subject: thread_pthread: do not corrupt stack This fixes stuck test/ruby/test_io.rb with FIBER_USE_NATIVE=0 on GNU/Linux because linked-list pointers used by glibc get corrupted when fiber stacks are copied. Thanks to wanabe for finding the bug and original patch. * thread_pthread (native_thread_init_stack): fix stack corruption [ruby-core:82737] [Bug #13387] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- thread_pthread.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'thread_pthread.c') diff --git a/thread_pthread.c b/thread_pthread.c index 0a3fee373d..83eb721a76 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -836,8 +836,9 @@ native_thread_init_stack(rb_thread_t *th) size_t size; if (get_stack(&start, &size) == 0) { - th->ec.machine.stack_start = start; - th->ec.machine.stack_maxsize = size; + uintptr_t diff = (uintptr_t)start - (uintptr_t)&curr; + th->ec.machine.stack_start = (VALUE *)&curr; + th->ec.machine.stack_maxsize = size - diff; } #elif defined get_stack_of if (!th->ec.machine.stack_maxsize) { -- cgit v1.2.3