Display error details when a mmap
call fails
This commit is contained in:
parent
f5d8117c33
commit
f414c33e5e
@ -39,6 +39,7 @@ impl Drop for Handler {
|
|||||||
))]
|
))]
|
||||||
mod imp {
|
mod imp {
|
||||||
use super::Handler;
|
use super::Handler;
|
||||||
|
use crate::io;
|
||||||
use crate::mem;
|
use crate::mem;
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
|
|
||||||
@ -149,11 +150,11 @@ mod imp {
|
|||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
if stackp == MAP_FAILED {
|
if stackp == MAP_FAILED {
|
||||||
panic!("failed to allocate an alternative stack");
|
panic!("failed to allocate an alternative stack: {}", io::Error::last_os_error());
|
||||||
}
|
}
|
||||||
let guard_result = libc::mprotect(stackp, page_size(), PROT_NONE);
|
let guard_result = libc::mprotect(stackp, page_size(), PROT_NONE);
|
||||||
if guard_result != 0 {
|
if guard_result != 0 {
|
||||||
panic!("failed to set up alternative stack guard page");
|
panic!("failed to set up alternative stack guard page: {}", io::Error::last_os_error());
|
||||||
}
|
}
|
||||||
stackp.add(page_size())
|
stackp.add(page_size())
|
||||||
}
|
}
|
||||||
|
@ -231,6 +231,7 @@ pub mod guard {
|
|||||||
use libc::{mmap, mprotect};
|
use libc::{mmap, mprotect};
|
||||||
use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE};
|
use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE};
|
||||||
|
|
||||||
|
use crate::io;
|
||||||
use crate::ops::Range;
|
use crate::ops::Range;
|
||||||
use crate::sync::atomic::{AtomicUsize, Ordering};
|
use crate::sync::atomic::{AtomicUsize, Ordering};
|
||||||
use crate::sys::os;
|
use crate::sys::os;
|
||||||
@ -361,12 +362,12 @@ pub mod guard {
|
|||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
if result != stackaddr || result == MAP_FAILED {
|
if result != stackaddr || result == MAP_FAILED {
|
||||||
panic!("failed to allocate a guard page");
|
panic!("failed to allocate a guard page: {}", io::Error::last_os_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = mprotect(stackaddr, page_size, PROT_NONE);
|
let result = mprotect(stackaddr, page_size, PROT_NONE);
|
||||||
if result != 0 {
|
if result != 0 {
|
||||||
panic!("failed to protect the guard page");
|
panic!("failed to protect the guard page: {}", io::Error::last_os_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
let guardaddr = stackaddr as usize;
|
let guardaddr = stackaddr as usize;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user