我怎么知道Linux内核中的地址是否可读?

时间:2013-06-27 07:47:03

标签: linux kernel

我怎么知道地址是否可读?

如果某个地址无法读取或未映射,则内核通常会回复此消息BUG: unable to handle kernel paging request at ffffffff80000018

那么,是否有任何函数可以验证特定地址是否可读(或地址范围)?

1 个答案:

答案 0 :(得分:1)

copy_from_user和相关函数从一些不受信任的用户空间程序中获取地址;它们通过安装特殊的异常处理程序来防止无效地址。 (有关详细信息,请参阅this answer。)

您也可以这样做,但这只会保护内核在页表中标记为无效的地址;访问某个随机设备的MMIO范围可能会产生不可预测的结果。

如果要在某些BIOS ROM中搜索某些内容,请像其他任何PCI资源一样重新映射该内存。

如果要在主内存中搜索某些内容,可以使用ioremapkmap之类的函数来获取特定物理地址的有效虚拟地址。