Only check user pages rather than all bytes in-between, for known-size pointers
This commit is contained in:
@@ -421,7 +421,8 @@ validate_user_pointer (const void *ptr, size_t size, bool check_write)
|
|||||||
void *last = ptr + size - 1;
|
void *last = ptr + size - 1;
|
||||||
if (!is_user_vaddr (last))
|
if (!is_user_vaddr (last))
|
||||||
thread_exit ();
|
thread_exit ();
|
||||||
for (; ptr <= last; ptr++)
|
ptr = pg_round_down (ptr);
|
||||||
|
while (ptr <= last)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
/* Check read access to pointer. */
|
/* 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). */
|
/* Check write access to pointer (if required). */
|
||||||
if (check_write && !put_user (ptr, result))
|
if (check_write && !put_user (ptr, result))
|
||||||
thread_exit ();
|
thread_exit ();
|
||||||
|
ptr += PGSIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user