From f336a3eb6c76890f3d8f878725b3d328c8fdcf33 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh 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 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'signal.c') diff --git a/signal.c b/signal.c index 764031e78a..4ca52b2ee6 100644 --- a/signal.c +++ b/signal.c @@ -557,10 +557,13 @@ static int rb_sigaltstack_size_value = 0; 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 */ -- cgit v1.2.1