Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145559
  • 博文数量: 24
  • 博客积分: 791
  • 博客等级: 军士长
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 11:00
文章存档

2011年(18)

2010年(6)

分类: LINUX

2011-05-17 21:54:20

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在很多地方都会被用到。

阅读(5788) | 评论(0) | 转发(2) |
0

上一篇:linux ip选项处理(四)

下一篇:没有了

给主人留下些什么吧!~~