From c8b93c57ee02520cb2b2e9da61811b86360415af Mon Sep 17 00:00:00 2001 From: sBubshait Date: Fri, 29 Nov 2024 15:45:44 +0000 Subject: [PATCH] Fix: Update writability of the last page after loading as a workaround to calculating the offset, w/ G --- src/userprog/exception.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/userprog/exception.c b/src/userprog/exception.c index 3996776..3a922d1 100644 --- a/src/userprog/exception.c +++ b/src/userprog/exception.c @@ -179,18 +179,23 @@ try_fetch_page (void *upage, bool write) if (page == NULL) return false; + /* An attempt to write to a non-writeable should fail. */ if (write && !page->writable) - { - pagedir_set_writable(thread_current()->pagedir, upage, write); - page->writable = true; - return true; - } + return false; /* Load the page into memory based on the type of data it is expecting. */ + bool success = false; switch (page->type) { case PAGE_EXECUTABLE: - return page_load (page, write); + success = page_load (page, page->writable); + break; default: return false; } -} \ No newline at end of file + + if (success && page->writable && + !pagedir_is_writable(thread_current()->pagedir, upage)) + pagedir_set_writable(thread_current()->pagedir, upage, true); + + return success; +}