Add Fixes to Memory Leaks, Memory Access Validation, Synchronised Processes and Refactoring #38

Merged
sb3923 merged 12 commits from system-calls into userprog-oom 2024-11-13 19:20:20 +00:00
13 changed files with 167 additions and 48 deletions
Showing only changes of commit d890c2353e - Show all commits

View File

@@ -13,6 +13,8 @@
#include <stdio.h>
#include <syscall-nr.h>
#define MAX_SYSCALL_ARGS 3
static unsigned fd_counter = MIN_USER_FD;
struct open_file
@@ -96,8 +98,8 @@ static void
syscall_handler (struct intr_frame *f)
{
/* First, read the system call number from the stack. */
validate_user_pointer (f->esp, 1);
unsigned syscall_number = *(int *) f->esp;
validate_user_pointer (f->esp, sizeof (uintptr_t));
uintptr_t syscall_number = *(int *) f->esp;
/* Ensures the number corresponds to a system call that can be handled. */
if (syscall_number >= LOOKUP_SIZE)
@@ -108,8 +110,8 @@ syscall_handler (struct intr_frame *f)
/* Next, read and copy the arguments from the stack pointer. */
validate_user_pointer (f->esp + sizeof (uintptr_t),
syscall.arity * sizeof (uintptr_t));
uintptr_t args[3] = {0};
for (int i=0; i < syscall.arity; i++)
uintptr_t args[MAX_SYSCALL_ARGS] = {0};
for (int i = 0; i < syscall.arity && i < MAX_SYSCALL_ARGS; i++)
args[i] = *(uintptr_t *) (f->esp + sizeof (uintptr_t) * (i + 1));
/* Call the function that handles this system call with the arguments. When