提交 78b3e8c8 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

fix validate test

上级 41f6fab5
...@@ -1403,10 +1403,10 @@ validatetest(void) ...@@ -1403,10 +1403,10 @@ validatetest(void)
uptr lo, hi, p; uptr lo, hi, p;
fprintf(stdout, "validate test\n"); fprintf(stdout, "validate test\n");
// Do 16 pages below the bottom of userspace and 16 pages above, // Do 16 pages below KBASE and 16 pages above,
// which should be code pages and read-only // which should be code pages and read-only
lo = (1024*1024) - 16*4096; lo = 0xFFFFFF0000000000ull - 16*4096;
hi = (1024*1024) + 16*4096; hi = 0xFFFFFF0000000000ull + 16*4096;
for(p = lo; p <= hi; p += 4096){ for(p = lo; p <= hi; p += 4096){
if((pid = fork(0)) == 0){ if((pid = fork(0)) == 0){
......
...@@ -120,7 +120,7 @@ trap(struct trapframe *tf) ...@@ -120,7 +120,7 @@ trap(struct trapframe *tf)
if(tf->trapno == T_PGFLT){ if(tf->trapno == T_PGFLT){
uptr addr = rcr2(); uptr addr = rcr2();
sti(); sti();
if(addr < USERTOP && pagefault(myproc()->vmap, addr, tf->err) >= 0){ if(pagefault(myproc()->vmap, addr, tf->err) >= 0){
#if MTRACE #if MTRACE
mtstop(myproc()); mtstop(myproc());
if (myproc()->mtrace_stacks.curr >= 0) if (myproc()->mtrace_stacks.curr >= 0)
......
...@@ -384,6 +384,9 @@ vmap::pagefault_wcow(vma *m) ...@@ -384,6 +384,9 @@ vmap::pagefault_wcow(vma *m)
int int
vmap::pagefault(uptr va, u32 err) vmap::pagefault(uptr va, u32 err)
{ {
if (va >= USERTOP)
return -1;
atomic<pme_t> *pte = walkpgdir(pml4, va, 1); atomic<pme_t> *pte = walkpgdir(pml4, va, 1);
retry: retry:
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论