diff options
| author | Robert Morris <rtm@csail.mit.edu> | 2019-09-20 09:41:03 -0400 | 
|---|---|---|
| committer | Robert Morris <rtm@csail.mit.edu> | 2019-09-20 09:41:03 -0400 | 
| commit | 402e7b56053312f4e96737ee7cd82395c998f00f (patch) | |
| tree | 4abf84fc5c23540a012e615e982648eff7a471eb /kernel | |
| parent | 57e40a020411924dc89fba9fdd22a048ff4513f0 (diff) | |
| download | xv6-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')
| -rw-r--r-- | kernel/vm.c | 5 | 
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; | 
