假设有两个Linux kernel modules
。
这两个模块之间共享一个global pointer
。
Module 1
正在尝试访问此pointer
,损坏此指针值并退出。
现在Module 2
正在尝试访问此pointer
,这不再有效且崩溃。
第1单元:
module_function()
{
//corrupt global_ptr
}
module2_function()
{
local_ptr = global_ptr;
//local_ptr corrupted
//Now if local_ptr is accessed, it will crash
}
如果这种情况有效且有可能,有人可以解释一下吗? 然后
i)如何调试此问题。也就是说,如何找出哪个模块正在破坏指针?
ii)如何修复此问题,以便module2永远不会崩溃?
答案 0 :(得分:0)
use-after-free
或use-after-modify
种bug
的典型案例,通常导致oops
,tainting
linux kernel
G flag
{1}}设置,结果为system hang and reboot
。如果由于logs
而无法获得/var/log/kern.log
,您可以在dmesg logs
中观察这些system hang
。kernel memory pointer corruption
问题,您需要Enable Slab Corruption debug
中的kernel menuconfig
,因此.config
。为了更快地参考,执行此操作的步骤如下: - make menuconfig ---> Kernel hacking ---> Memory debugging ---> Debug slab memory locations
global pointers
,因为您永远不知道哪个模块可能会freed
首先导致指针损坏。