Fix validatetest in usertests

上级 25758885
...@@ -1379,31 +1379,22 @@ sbrktest(void) ...@@ -1379,31 +1379,22 @@ sbrktest(void)
} }
void void
validateint(int *p)
{
int res;
__asm("mov %%esp, %%ebx\n\t"
"mov %3, %%esp\n\t"
"int %2\n\t"
"mov %%ebx, %%esp" :
"=a" (res) :
"a" (SYS_sleep), "n" (T_SYSCALL), "c" (p) :
"ebx");
}
void
validatetest(void) validatetest(void)
{ {
int hi, pid; int pid;
uptr p; uptr lo, hi, p;
printf(stdout, "validate test\n"); printf(stdout, "validate test\n");
hi = 1100*1024; // Do 16 pages below the bottom of userspace and 16 pages above,
// which should be code pages and read-only
lo = (1024*1024) - 16*4096;
hi = (1024*1024) + 16*4096;
for(p = 0; p <= (uptr)hi; p += 4096){ for(p = lo; p <= hi; p += 4096){
if((pid = fork(0)) == 0){ if((pid = fork(0)) == 0){
// try to crash the kernel by passing in a badly placed integer // try to crash the kernel by passing in a badly placed integer
validateint((int*)p); if (pipe((int*)p) == 0)
printf(stdout, "validatetest failed (pipe succeeded)\n");
exit(); exit();
} }
sleep(0); sleep(0);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论