免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2345 | 回复: 4
打印 上一主题 下一主题

[内存管理] Slab corruption这是什么提示,是错误吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-22 17:37 |只看该作者 |倒序浏览
调试驱动的时候串口终端有时会打印出这个,类似这样:

Slab corruption: size-32 start=c5e96760, len=32
000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 00 00 00 00
Prev obj: start=c5e96740, len=32
000: 60 77 4e c0 00 00 00 00 00 00 00 00 00 00 00 00
010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Next obj: start=c5e96780, len=32
000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
010: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5

这个是什么提示,有熟悉的朋友吗,请教一下,谢谢。

论坛徽章:
0
2 [报告]
发表于 2013-07-22 17:40 |只看该作者
万恶的xxx,用google搜到一点链接就不能显示。愤怒

论坛徽章:
0
3 [报告]
发表于 2013-07-23 10:59 |只看该作者
自己顶一下,有熟悉的吗?

论坛徽章:
0
4 [报告]
发表于 2013-07-23 16:03 |只看该作者
slab在在创建时会用
#define POISON_FREE        0x6b        /* for use-after-free poisoning */
#define        POISON_END        0xa5        /* end-byte of poisoning */
填充每个对象
在释放对象是也填充

v2.6.32

static void poison_obj(struct kmem_cache *cachep, void *addr, unsigned char val)
{
        int size = obj_size(cachep);
        addr = &((char *)addr)[obj_offset(cachep)];

        memset(addr, val, size);
        *(unsigned char *)(addr + size - 1) = POISON_END;
}

当slab销毁时,会检测每个对象的填充是否完整,否则就报Slab corruption

论坛徽章:
0
5 [报告]
发表于 2013-07-24 15:06 |只看该作者
回复 4# qtdszws


    多谢兄弟指点,回去研究一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP