Fixes #31229
This commit is contained in:
@@ -135,17 +135,42 @@ mod imp {
|
||||
Handler { _data: MAIN_ALTSTACK };
|
||||
}
|
||||
|
||||
pub unsafe fn make_handler() -> Handler {
|
||||
let alt_stack = mmap(ptr::null_mut(),
|
||||
SIGSTKSZ,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON,
|
||||
-1,
|
||||
0);
|
||||
if alt_stack == MAP_FAILED {
|
||||
#[cfg(any(target_os = "linux",
|
||||
target_os = "macos",
|
||||
target_os = "bitrig",
|
||||
target_os = "netbsd",
|
||||
target_os = "openbsd"))]
|
||||
unsafe fn get_stack() -> *mut libc::c_void {
|
||||
let stack = mmap(ptr::null_mut(),
|
||||
SIGSTKSZ,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON,
|
||||
-1,
|
||||
0);
|
||||
if stack == MAP_FAILED {
|
||||
panic!("failed to allocate an alternative stack");
|
||||
}
|
||||
stack
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "dragonfly",
|
||||
target_os = "freebsd"))]
|
||||
unsafe fn get_stack() -> *mut i8 {
|
||||
let stack = mmap(ptr::null_mut(),
|
||||
SIGSTKSZ,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON,
|
||||
-1,
|
||||
0);
|
||||
if stack == MAP_FAILED {
|
||||
panic!("failed to allocate an alternative stack");
|
||||
}
|
||||
stack as *mut i8
|
||||
}
|
||||
|
||||
|
||||
pub unsafe fn make_handler() -> Handler {
|
||||
let alt_stack = get_stack();
|
||||
let mut stack: libc::stack_t = mem::zeroed();
|
||||
|
||||
stack.ss_sp = alt_stack;
|
||||
@@ -154,7 +179,7 @@ mod imp {
|
||||
|
||||
sigaltstack(&stack, ptr::null_mut());
|
||||
|
||||
Handler { _data: alt_stack }
|
||||
Handler { _data: alt_stack as *mut libc::c_void }
|
||||
}
|
||||
|
||||
pub unsafe fn drop_handler(handler: &mut Handler) {
|
||||
|
||||
Reference in New Issue
Block a user