diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c index 2b0a551..1be6c77 100644 --- a/src/userprog/syscall.c +++ b/src/userprog/syscall.c @@ -421,7 +421,8 @@ validate_user_pointer (const void *ptr, size_t size, bool check_write) void *last = ptr + size - 1; if (!is_user_vaddr (last)) thread_exit (); - for (; ptr <= last; ptr++) + ptr = pg_round_down (ptr); + while (ptr <= last) { int result; /* Check read access to pointer. */ @@ -430,6 +431,7 @@ validate_user_pointer (const void *ptr, size_t size, bool check_write) /* Check write access to pointer (if required). */ if (check_write && !put_user (ptr, result)) thread_exit (); + ptr += PGSIZE; } }