2012-08-14 81 views
0

我正在编写一个API作为另一个模块的Linux内核模块。对于最初的开发,我想对传递给我的API的物理内存指针做一些内存范围检查。这样,我的模块可以帮助捕捉模块中的错误,并且我的模块不会因坏指针而受到指责。如何在Linux内核中为非用户空间内存执行内存范围检查?

我知道有很多方法可以检查内核中用户空间有效内存的指针。问题是我还没有找到预先打包的方式来对内核可访问的物理内存进行范围检查。

检查正常的内核线性地址范围当然是一种可能性(0x00000000到0xbfffffff和0xc0000000到0xffffffff [了解Linux Kernel 3rd ed])。内核中是否有任何函数或宏可用于执行此操作,并且可能比我的建议更好?

回答

1

如果它们确实是物理地址,则可以使用page_is_ram()

虽然您可能正在获取内核虚拟地址,但在这种情况下,您必须先将其转换为内核虚拟地址。

+0

它们绝对是物理地址。在一种情况下,它正在访问内存跟踪。添加另一个标志或函数来正确处理与内核内存相似的操作可能不是一个坏主意。 – Joshua 2012-08-15 15:23:13

+0

'__pa()'会将虚拟地址转换为物理地址。 – mpe 2012-08-16 03:11:00

相关问题