summaryrefslogtreecommitdiff
path: root/kernel/vm.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2019-09-20 09:41:03 -0400
committerRobert Morris <[email protected]>2019-09-20 09:41:03 -0400
commit402e7b56053312f4e96737ee7cd82395c998f00f (patch)
tree4abf84fc5c23540a012e615e982648eff7a471eb /kernel/vm.c
parent57e40a020411924dc89fba9fdd22a048ff4513f0 (diff)
downloadxv6-labs-402e7b56053312f4e96737ee7cd82395c998f00f.tar.gz
xv6-labs-402e7b56053312f4e96737ee7cd82395c998f00f.tar.bz2
xv6-labs-402e7b56053312f4e96737ee7cd82395c998f00f.zip
fix a potential kernel crash
add a regression test for it
Diffstat (limited to 'kernel/vm.c')
-rw-r--r--kernel/vm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/vm.c b/kernel/vm.c
index e0bc728..b2bfe2c 100644
--- a/kernel/vm.c
+++ b/kernel/vm.c
@@ -99,6 +99,9 @@ walkaddr(pagetable_t pagetable, uint64 va)
pte_t *pte;
uint64 pa;
+ if(va >= MAXVA)
+ return 0;
+
pte = walk(pagetable, va, 0);
if(pte == 0)
return 0;
@@ -408,7 +411,7 @@ copyinstr(pagetable_t pagetable, char *dst, uint64 srcva, uint64 max)
int got_null = 0;
while(got_null == 0 && max > 0){
- va0 = (uint)PGROUNDDOWN(srcva);
+ va0 = PGROUNDDOWN(srcva);
pa0 = walkaddr(pagetable, va0);
if(pa0 == 0)
return -1;