From 98a581840666de1fd45810ac1268301f9e2cd105 Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Mon, 11 Nov 2024 17:55:24 +0000 Subject: [PATCH] add file_deny_write and file_allow_write to process creation and exiting to make executable read-only --- src/threads/thread.h | 1 + src/userprog/process.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/threads/thread.h b/src/threads/thread.h index 6c65dcb..33a5485 100644 --- a/src/threads/thread.h +++ b/src/threads/thread.h @@ -127,6 +127,7 @@ struct thread struct process_result *result; /* Result of the process. */ struct list child_results; /* List of children's of this thread process results. */ + struct file *exec_file; /* Thread's currently running file */ /* Shared between thread.c and synch.c. */ struct list_elem elem; /* List element. */ diff --git a/src/userprog/process.c b/src/userprog/process.c index 3943b21..e11eff9 100644 --- a/src/userprog/process.c +++ b/src/userprog/process.c @@ -181,6 +181,10 @@ start_process (void *file_name_) if (!success) thread_exit (); + struct file *exec_file = filesys_open (file_name); + thread_current ()->exec_file = exec_file; + file_deny_write (exec_file); + /* Start the user process by simulating a return from an interrupt, implemented by intr_exit (in threads/intr-stubs.S). Because intr_exit takes all of its @@ -246,6 +250,7 @@ process_exit (void) uint32_t *pd; printf ("%s: exit(%d)\n", cur->name, cur->exit_status); + file_close (cur->exec_file); /* Update process result. */ if (cur->result != NULL)