mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-17 12:47:16 +00:00
Avoid init stack top at MAX_USERSPACE_VADDR
This commit is contained in:
parent
85d2c9634f
commit
c200997c9a
@ -121,9 +121,17 @@ impl Clone for InitStack {
|
|||||||
impl InitStack {
|
impl InitStack {
|
||||||
pub(super) fn new() -> Self {
|
pub(super) fn new() -> Self {
|
||||||
let nr_pages_padding = {
|
let nr_pages_padding = {
|
||||||
let mut random_nr_pages_padding: u8 = 0;
|
// We do not want the stack top too close to MAX_USERSPACE_VADDR.
|
||||||
getrandom(random_nr_pages_padding.as_bytes_mut()).unwrap();
|
// So we add this fixed padding. Any small value greater than zero will do.
|
||||||
random_nr_pages_padding as usize
|
const NR_FIXED_PADDING_PAGES: usize = 7;
|
||||||
|
|
||||||
|
// Some random padding pages are added as a simple measure to
|
||||||
|
// make the stack values of a buggy user program harder
|
||||||
|
// to be exploited by attackers.
|
||||||
|
let mut nr_random_padding_pages: u8 = 0;
|
||||||
|
getrandom(nr_random_padding_pages.as_bytes_mut()).unwrap();
|
||||||
|
|
||||||
|
nr_random_padding_pages as usize + NR_FIXED_PADDING_PAGES
|
||||||
};
|
};
|
||||||
let initial_top = MAX_USERSPACE_VADDR - PAGE_SIZE * nr_pages_padding;
|
let initial_top = MAX_USERSPACE_VADDR - PAGE_SIZE * nr_pages_padding;
|
||||||
let max_size = INIT_STACK_SIZE;
|
let max_size = INIT_STACK_SIZE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user