Fix Bug in syscall handler related to pointer arithmetic: add sizeof uintptr_t instead of 1
This commit is contained in:
@@ -57,10 +57,11 @@ syscall_handler (struct intr_frame *f)
|
||||
syscall_arguments syscall = syscall_lookup[syscall_number];
|
||||
|
||||
/* Next, read and copy the arguments from the stack pointer. */
|
||||
validate_user_pointer (f->esp, syscall.arity);
|
||||
uintptr_t args[3];
|
||||
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 + 1 + 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. */
|
||||
|
||||
Reference in New Issue
Block a user