Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670912
  • 博文数量: 81
  • 博客积分: 1659
  • 博客等级: 上尉
  • 技术积分: 1286
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 16:36
个人简介

专注于嵌入式和图像处理

文章分类

全部博文(81)

文章存档

2014年(1)

2013年(7)

2012年(46)

2011年(27)

分类:

2012-05-17 21:49:22

bug提示无法请求0000000000200200地址所在的页,而问题出在list_del函数;分析list_del函数:
 

在内核中0xC0000000以下(内存为4G,高地址1G作为内核空间使用,低地址3G作为用户空间使用,此3G内核空间申请不到)的地址是不能申请到的,为了防止有的节点申请内存错误的时候也是NULL使用不可能被初始化的指针当作标记。而0x00200200 这样的低地址是内核空间申请内存不会出现的地址可以拿来当标记,

因为0x00200200不能被内核申请,所以当我们在内核空间引用该指针时,就会出现上面的BUG

把entry->prev 设置为 LIST_POISON2,这样做有一个好处,就是:当你一旦不小心错误的引用了 entry->prev 这个指针的时候,就会打印如下的出错信息:Unable to handle kernel paging request at virtual address 00200200这样由出错信息中的“00200200”,你就可以知道是错误的引用了已经被删除了的链表节点啦!相反,如果把entry->prev 设置为 NULL,当你一旦不小心错误的引用了 entry->prev 这个指针的时候,打印的出错信息如下:Unable to handle kernel paging request at virtual address 00000000这样我们从出错地址“00000000”看不出出错的原因是错误的引用了已经被删除了的链表节点,因为NULL在很多地方都会被用到。

阅读(1172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~