- 论坛徽章:
- 0
|
V2.4.0
1.下面的TEST_VERIFY_AREA什么意思,难道说(执行到此处时addr<=TASK_SIZE),有内核不能写的页存在?
2.case 1不可能发生,为什么要加上,并认为是出错?
3.case 0没有多大意义,因为如果一个area连读都不可以?
4.case 2和case 0发生的次数显然远多于其他两种,这样的switch很难让人满意?
si_code = SEGV_ACCERR;
write = 0;
switch (error_code & 3) {
default: /* 3: write, present */
#ifdef TEST_VERIFY_AREA
if (regs->cs == KERNEL_CS)
printk("WP fault at %08lx\n", regs->eip);
#endif
/* fall through */
case 2: /* write, not present */
if (!(vma->vm_flags & VM_WRITE))
goto bad_area;
write++;
break;
case 1: /* read, present */
goto bad_area;
case 0: /* read, not present */
if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
goto bad_area;
} |
|