[前][次][番号順一覧][スレッド一覧]

ruby-changes:67632

From: Yusuke <ko1@a...>
Date: Mon, 6 Sep 2021 14:25:22 +0900 (JST)
Subject: [ruby-changes:67632] f336a3eb6c (master): Use free instead of xfree to free altstack

https://git.ruby-lang.org/ruby.git/commit/?id=f336a3eb6c

From f336a3eb6c76890f3d8f878725b3d328c8fdcf33 Mon Sep 17 00:00:00 2001
From: Yusuke Endoh <mame@r...>
Date: Mon, 6 Sep 2021 14:22:24 +0900
Subject: Use free instead of xfree to free altstack

The altstack memory of a thread may be free'ed even after the VM is
destructed. After that, GC is no longer available, so calling xfree
may lead to a segfault.

This changeset uses the bare free function to free the altstack memory
instead of xfree. [Bug #18126]
---
 signal.c  | 5 ++++-
 vm_core.h | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/signal.c b/signal.c
index 764031e..4ca52b2 100644
--- a/signal.c
+++ b/signal.c
@@ -557,10 +557,13 @@ static int rb_sigaltstack_size_value = 0; https://github.com/ruby/ruby/blob/trunk/signal.c#L557
 void *
 rb_allocate_sigaltstack(void)
 {
+    void *altstack;
     if (!rb_sigaltstack_size_value) {
 	rb_sigaltstack_size_value = rb_sigaltstack_size();
     }
-    return xmalloc(rb_sigaltstack_size_value);
+    altstack = malloc(rb_sigaltstack_size_value);
+    if (!altstack) rb_memerror();
+    return altstack;
 }
 
 /* alternate stack for SIGSEGV */
diff --git a/vm_core.h b/vm_core.h
index 5db3080..2962356 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -136,7 +136,7 @@ https://github.com/ruby/ruby/blob/trunk/vm_core.h#L136
 void *rb_allocate_sigaltstack(void);
 void *rb_register_sigaltstack(void *);
 #  define RB_ALTSTACK_INIT(var, altstack) var = rb_register_sigaltstack(altstack)
-#  define RB_ALTSTACK_FREE(var) xfree(var)
+#  define RB_ALTSTACK_FREE(var) free(var)
 #  define RB_ALTSTACK(var)  var
 #else /* noop */
 #  define RB_ALTSTACK_INIT(var, altstack)
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]