From d890c2353ec0d40841241d049ed02c7af255dea9 Mon Sep 17 00:00:00 2001 From: sBubshait Date: Wed, 13 Nov 2024 17:15:56 +0000 Subject: [PATCH] Add constant MAX_SYSCALL_ARGS to avoid magic numbers [Gleb] --- src/userprog/syscall.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c index d60214d..0628c02 100644 --- a/src/userprog/syscall.c +++ b/src/userprog/syscall.c @@ -13,6 +13,8 @@ #include #include +#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. */