From 59e7a64f8e1e538c010cf6c31974c4bf9d5dcbe1 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Tue, 12 Nov 2024 15:48:22 +0000 Subject: [PATCH] Only check user pages rather than all bytes in-between, for known-size pointers --- src/userprog/syscall.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; } }