【问题标题】:How do I know if an address in Linux kernel is readable or not?我如何知道 Linux 内核中的地址是否可读?
【发布时间】:2013-06-27 07:47:03
【问题描述】:

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

如果地址不可读或未映射,内核通常会以类似BUG: unable to handle kernel paging request at ffffffff80000018 的消息进行响应。

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

【问题讨论】:

  • 访问任何随机硬件的内存可能会炸毁计算机。你在想什么?

标签: linux kernel


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2020-11-28
    • 2012-07-30
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多