From 2cae438642a7ccf6ed7101acfaf600c41e5dd83d Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 21 Jan 2026 09:42:36 +0000 Subject: [PATCH] fix: sigsegv handler (#21231) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- crates/cli/util/src/sigsegv_handler.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/cli/util/src/sigsegv_handler.rs b/crates/cli/util/src/sigsegv_handler.rs index 78e37cf157..c7087233ae 100644 --- a/crates/cli/util/src/sigsegv_handler.rs +++ b/crates/cli/util/src/sigsegv_handler.rs @@ -121,7 +121,16 @@ pub fn install() { unsafe { let alt_stack_size: usize = min_sigstack_size() + 64 * 1024; let mut alt_stack: libc::stack_t = mem::zeroed(); - alt_stack.ss_sp = alloc(Layout::from_size_align(alt_stack_size, 1).unwrap()).cast(); + // Both SysV AMD64 ABI and aarch64 ABI require 16 bytes alignment. We are going to be + // generous here and just use a size of a page. + let raw_page_sz = libc::sysconf(libc::_SC_PAGESIZE); + let page_sz = if raw_page_sz == -1 { + // Fallback alignment in case sysconf fails. + 4096_usize + } else { + raw_page_sz as usize + }; + alt_stack.ss_sp = alloc(Layout::from_size_align(alt_stack_size, page_sz).unwrap()).cast(); alt_stack.ss_size = alt_stack_size; libc::sigaltstack(&raw const alt_stack, ptr::null_mut());