两个Linux内核模块破坏了共享指针 - 如何调试?

时间:2017-01-15 15:38:50

标签: linux-kernel linux-device-driver

假设有两个Linux kernel modules。 这两个模块之间共享一个global pointerModule 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永远不会崩溃?

1 个答案:

答案 0 :(得分:0)

  1. 这是use-after-freeuse-after-modifybug的典型案例,通常导致oopstainting linux kernel G flag {1}}设置,结果为system hang and reboot。如果由于logs而无法获得/var/log/kern.log,您可以在dmesg logs中观察这些system hang
  2. 要调试此类kernel memory pointer corruption问题,您需要Enable Slab Corruption debug中的kernel menuconfig,因此.config。为了更快地参考,执行此操作的步骤如下: - make menuconfig ---> Kernel hacking ---> Memory debugging ---> Debug slab memory locations
  3. 此问题的设计解决方案是不在模块之间使用global pointers,因为您永远不知道哪个模块可能会freed首先导致指针损坏。