gpt4 book ai didi

memory-management - Linux 页面中毒

转载 作者:行者123 更新时间:2023-12-03 21:40:03 27 4
gpt4 key购买 nike

我正在处理 ARM Linux .当我们启用 CONFIG_PAGE_POISONING , 页面在 free_pages() 之后填充了毒字节模式并在 alloc_pages() 之前验证毒药模式.

通过在分配新页面之前验证有害字节模式,这有助于我识别位翻转或页面内存损坏。但是如何确定罪魁祸首呢?我在谷歌搜索,但找不到。

最佳答案

我知道这是一个老问题,但我刚刚遇到了类似的问题,我花了一些时间来调试它。所以我会在这里推荐两个对我非常有用的工具(我同时使用了它们):
第一个工具:KMEMLEAK
为了启用它,您必须在内核配置中启用它:

CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK=y
如果你得到这个内核日志:
kmemleak: Kernel memory leak detector disabled
kmemleak: Early log buffer exceeded (xxxx), please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE
然后我还建议将其添加到您的内核配置中:
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
另外我认为你需要添加 kmemleak=on到引导参数(因为我不确定它是否默认启用)。
毕竟,KMEMLEAK 工具已准备好运行。
现在我建议看看下面链接中给出的例子。他们帮助我了解如何使用(API 以及如何读取它的日志):
KMEMLEAK first example
KMEMLEAK second example
第二个工具:SLUB_DEBUG
SLUB_DEBUG 对于查找由释放后使用、双重释放和缓冲区溢出错误引起的内存损坏非常有用。
为了启用它,您应该更新您的内核配置:
CONFIG_SLUB_DEBUG=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_PAGE_POISONING=y
我还建议添加:
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_PAGE_OWNER=y
此外,您可能需要将下一个标志添加到引导参数中: page_poison=on, slub_debug=FZP如果您还设置了 CONFIG_PAGE_OWNER ,您还需要 page_owner=on .
设置完所有调试配置后,您应该看看下一个示例。它清晰且有用。
SLUB_DEBUG example
祝你找到你的错误!

关于memory-management - Linux 页面中毒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com