内存越界引起的bug汇总
来源:互联网 发布:张大奕的淘宝店链接 编辑:程序博客网 时间:2024/06/05 07:09
转载自: http://blog.csdn.net/guogaofeng1219/article/details/6208287
1
一个比较隐蔽的死锁bug
在测试代码的过程中,发现有大概百分之一的概率会出现一个死锁bug。进过仔细检查,发现加锁,解锁的地方是没有问题的。实在找不到问题的原因了,一狠心在每次加锁和解锁之后,将rwlock_t中的lock值打印出来。 每次write_unlock之后,那个值本应该是0的,但在出现问题的时候,发现那个值一个乱码。于是怀疑是锁占的那块内存被写掉了(内存越界)。后来调试发现, 由于在结构体中 rwlock_t 是放在最后的位置上的,它前面还有个字符数组,由于往字符数组里写东西的时候,没有强制长度(写的随机数)。因此发生由于内存越界导致的死锁。
2
内核栈溢出引起的bug
现象:
在内核schedule函数里面发生panic,提示schedule处于原子上下文中(in_atomic()为1 ,即当前thread_info的preempt_count不为0)。进过加log调试发现,preempt_count是突然变成一个很大的数的。
这种现象比较容易重复,提示的panic信息也相同。
猜测:
是内核栈溢出。 因为内核栈和thread_info共用8k的内存,因为内核栈溢出,把thread_info中的preempt_count值冲掉了,所以出现了奇怪的panic。
验证:
在函数内部申请一个局部变量,如果该局部变量的地址,小于thread_info里面preempt_count的地址,则猜想成立。
这是因为栈是向低地址增长的。
注意:
在内核编程中一定要防止递归调用和分配局部大数组,因为它们都有可能引发内核栈溢出
3
由于进行强转了结构,导致对结构里面的指针进行错误操作。引起的vfree()bad address.
现象:
提示vfree()bad address. (引起这个问题的另外一个原因是,kmalloc分配的内存,用vfree来释放)
注意:
进行结构强转时,一定要注意,会不会对强转后的结构里面的成员,做特殊操作。
4
关于cache pool Cann't free all objects
以前碰到这种情况 都是由于slab_cache 中有块没有被释放,但是今天碰到了由于某个指针所在的结构没有被初始化,导致多被mempool_free了一次, 最终导致了这种情况。
5
今天调一个bug,始终找不到问题的原因。最后发现 是因为变量越界的问题。
将一个int型的变量 左移 64位,就会出现意想不到的错误。
- 内存越界引起的bug汇总
- 内存越界引起的bug汇总
- 今天遇到一个由于内存访问越界而引起的bug
- scanf引起的内存越界问题
- VS2005编译器的改进后,有些可能引起内存越界的函数不被推荐了
- 可怕的内存越界
- Const Interface Bug引起的内存泄漏(重发)
- javascript实现rowSpan引起的数组越界
- 因栈越界引起的问题解析
- 由memcpy越界引起的崩溃
- unsigned引起的bug
- typedef引起的bug
- Android开发,关于引起内存泄露的资源汇总
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
- strcat的内存越界陷阱
- 越界访问内存的问题
- 关于内存越界的问题
- 2014.1.16实施数据迁移时遇到的问题(ORA-00214和ORA-39700问题解决)
- MongoDB教程快速学会入门 第3篇 细说高级操作
- clang static analyze
- Palindrome Number
- CLR
- 内存越界引起的bug汇总
- 【分享】Foursquare和Gowalla的签到数据
- MongoDB教程快速学会入门 第4篇 索引操作
- localhost无法访问
- Median of Two Sorted Arrays
- Android屏蔽软键盘并且有光标显示。和关闭软键盘方法,保存下来方便日后使用
- Binary Tree Inorder Traversal
- Objective-C 的 self 和 super 详解
- 验证码实现