summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/vm.c4
-rw-r--r--user/usertests.c9
2 files changed, 8 insertions, 5 deletions
diff --git a/kernel/vm.c b/kernel/vm.c
index b2bfe2c..51165b7 100644
--- a/kernel/vm.c
+++ b/kernel/vm.c
@@ -359,7 +359,7 @@ copyout(pagetable_t pagetable, uint64 dstva, char *src, uint64 len)
uint64 n, va0, pa0;
while(len > 0){
- va0 = (uint)PGROUNDDOWN(dstva);
+ va0 = PGROUNDDOWN(dstva);
pa0 = walkaddr(pagetable, va0);
if(pa0 == 0)
return -1;
@@ -384,7 +384,7 @@ copyin(pagetable_t pagetable, char *dst, uint64 srcva, uint64 len)
uint64 n, va0, pa0;
while(len > 0){
- va0 = (uint)PGROUNDDOWN(srcva);
+ va0 = PGROUNDDOWN(srcva);
pa0 = walkaddr(pagetable, va0);
if(pa0 == 0)
return -1;
diff --git a/user/usertests.c b/user/usertests.c
index 7da62d1..22b01a2 100644
--- a/user/usertests.c
+++ b/user/usertests.c
@@ -1908,15 +1908,18 @@ stacktest(char *s)
exit(xstatus);
}
-// copyinstr() used to cast the virtual page address to uint,
-// which (with certain wild system call arguments) could
-// result in a kernel page fault.
+// copyin(), copyout(), and copyinstr() used to cast the virtual page
+// address to uint, which (with certain wild system call arguments)
+// resulted in a kernel page faults.
void
pgbug(char *s)
{
char *argv[1];
argv[0] = 0;
exec((char*)0xeaeb0b5b00002f5e, argv);
+
+ pipe((int*)0xeaeb0b5b00002f5e);
+
exit(0);
}