Fix Memory Leaks, Synchronisation in Processes, and Refactoring #37

Merged
sb3923 merged 11 commits from task2/system-calls/saleh into system-calls 2024-11-13 18:51:52 +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,9 +110,9 @@ 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++)
args[i] = *(uintptr_t *) (f->esp + sizeof (uintptr_t) * (i + 1));
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
there is a return value it is stored in f->eax. */