+ -
当前位置:首页 → 问答吧 → 关于在内核态写内核只读区域的问题。

关于在内核态写内核只读区域的问题。

时间:2010-09-10

来源:互联网

本帖最后由 peng850okay 于 2010-09-11 22:42 编辑

大家好,请教如下一个问题。 谢谢。

内核版本 2.6.28
如果内核(2.6.28的内核)态的一段代码写内核的一个只读区域,应该会发生page_fault是吧??

某一个内核测试函数。有如下几句代码

  void * test =(void *)__get_free_pages (GFP_KERNEL,10); / /获得4M的空间。
  struct task_struct * task = get_current_task();
   struct mm_struct * prevt;
    if(task->active_mm)
        prev=task->active_mm;
    else
        prev=&init_mm;
    //把这4M的空间的页表项置为只读。。  内核里面 页表项是pgd_t了,一次转换4m的线性地址。。
    pgd_t *pgd=pgd_offset(prev,(unsigned long)test);
    pte_t *pte=(pte_t *) pgd;
     *pte=pte_wrprotect(*pte);
      flush_tlb();
//然后写这个空间。
       int *p =(int *)test;
           *p=123;  // 照例说是不是这里会产生一个异常????

现在的情况是,系统卡住了死机了。。。。。。请教一下,我的理解是 *p=123会产生 page_fault异常,进入对应函数去做异常处理。。。
向各位请教了,谢谢。。。。

作者: peng850okay   发布时间: 2010-09-10

回复 peng850okay


    没人回答啊。。。。。。。。哎。。。!

作者: peng850okay   发布时间: 2010-09-12

回复 peng850okay


卡住死机可能是正常的.

作者: epegasus   发布时间: 2010-09-12

按我的理解,*p=123会产生 page_fault异常,也会进入对应函数去做异常处理……但是能够怎么处理呢?不可能把不可写的改为可写吧。除了oops,我想不到内核还可以怎样处理。

作者: kouu   发布时间: 2010-09-12

热门下载

更多