首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试内核模块(内存corruption_

调试内核模块(内存corruption_
EN

Stack Overflow用户
提问于 2012-10-18 05:45:09
回答 1查看 6.9K关注 0票数 6

我正在调试我的内核模块,它似乎有一个内存损坏,基本上是由alloc_netdev()分配给'net_device‘实例的一块内存已经损坏。

1)我在内核的.config中打开了CONFIG_DEBUG_KERNELCONFIG_DEBUG_SLABCONFIG_DEBUG_KMEMLEAK,但是不确定从kmemleak能得到什么。每当我读取/sys/kernel/debug/kmemleak时,它是否应该打印出疑似内存泄漏的跟踪转储?有没有办法重置kmemleak累积的统计/信息?最重要的一点--有人能帮助破译输出吗,例如:

代码语言:javascript
复制
unreferenced object 0xc625e000 (size 2048):
  comm "swapper", pid 1, jiffies 4294937521
  backtrace:
    [<c00c89f0>] create_object+0x11c/0x200
    [<c00c6764>] __kmalloc_track_caller+0x138/0x178
    [<c01d78c0>] __alloc_skb+0x4c/0x100
    [<c01d8490>] dev_alloc_skb+0x18/0x3c
    [<c0198b48>] eth_rx_fill+0xd8/0x3fc
    [<c019ac74>] mv_eth_start_internals+0x30/0xf8
    [<c019c5fc>] mv_eth_start+0x70/0x244
    [<c019c810>] mv_eth_open+0x40/0x64
    [<c01e00f0>] dev_open+0xb4/0x118
    [<c01df788>] dev_change_flags+0x90/0x168
    [<c001a3e4>] ip_auto_config+0x1bc/0xecc
    [<c00212f4>] do_one_initcall+0x5c/0x1bc
    [<c00083d0>] kernel_init+0x8c/0x108
    [<c0022f58>] kernel_thread_exit+0x0/0x8
    [<ffffffff>] 0xffffffff

2)我还想知道我是否可以在这个内存上应用一些“只读”属性,这样当有人试图修改内存时,我希望生成Oops。这听起来合理吗?

感谢您的建议,谢谢。

标记

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-18 15:11:00

要捕获不正确的内存访问,KAsankmemcheck可能更有用。但是请注意,众所周知,Kmemcheck会招致重大损失,这有时可能是不可接受的,因此由您决定。KASan应该要快得多。

关于

  1. ,其操作在kernel docs.

中进行了详细描述

简而言之,它更可靠地执行

代码语言:javascript
复制
echo scan > /sys/kernel/debug/kmemleak

作为根用户在读取/sys/kernel/debug/kmemleak之前立即触发内存分析。有时,我发现在阅读kmemleak的报告之前执行上述命令两次会更可靠。

要“重置”kmemleak收集的数据,您可以执行以下命令

代码语言:javascript
复制
echo clear > /sys/kernel/debug/kmemleak

您发布的输出意味着kmemleak认为在该工具上次分析内存时,地址0xc625e000处的2Kb内存区域尚未被释放。回溯指定内存分配的位置。"swapper“是分配了该内存区域的进程的名称。

  1. 就将内存设置为只读而言,该技术确实用于内核的某些地方,例如,保护内核本身和模块的代码。我不能在这里给你确切的说明,但是set_page_attributes() function的实现是一个很好的开始。

注意,我上面提到的kmemcheck使用了一种有点类似的技术来跟踪内存访问:使页面“看起来”就像它们不存在一样,这样每次对它们的访问都会导致页面错误,等等。详细信息通常在kernel docs中。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12943906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档