fix: remove stack fault checks for page faults outside user non-present addresses
This commit is contained in:
@@ -149,14 +149,10 @@ page_fault (struct intr_frame *f)
|
||||
#ifdef VM
|
||||
if (user && not_present)
|
||||
{
|
||||
if (handle_stack_fault (fault_addr, f->esp))
|
||||
return;
|
||||
if (handle_stack_fault (fault_addr, f->esp)) return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (handle_stack_fault (fault_addr, thread_current ()->curr_esp))
|
||||
return;
|
||||
|
||||
f->eip = (void *)f->eax;
|
||||
f->eax = 0xffffffff;
|
||||
return;
|
||||
|
||||
@@ -26,8 +26,7 @@ handle_stack_fault (const void *ptr, const void *esp)
|
||||
static bool
|
||||
is_stack_fault (const void *addr, const void *esp)
|
||||
{
|
||||
return (is_user_vaddr (addr) &&
|
||||
(uint32_t*)addr >= ((uint32_t*)esp - MAX_STACK_ACCESS_DIST) &&
|
||||
return ((uint32_t*)addr >= ((uint32_t*)esp - MAX_STACK_ACCESS_DIST) &&
|
||||
((PHYS_BASE - pg_round_down (addr)) <= MAX_STACK_SIZE));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user