如何确定哪个地址对PCI / PCIe内存空间无效

时间:2015-08-24 17:54:20

标签: linux-device-driver device-driver pci pci-e

我正在编写PCIe设备驱动程序,并想在内存映射空间中添加I / O地址有效性的健全性检查,即在驱动程序用户提供无效地址的情况下,读取/的驱动程序API写入PCI内存映射空间会返回错误。 PCI / PCIe规范没有定义哪些地址被认为是无效的。

驱动程序用户指的是另一个可能使用我通过SELECT * FROM `votes` WHERE ip = "1.1.1.1." AND question_id BETWEEN 1 AND 5 公开的API的内核模块。

更新

我在PCI硬件上的内容如下:

BAR0寄存器EXPORT_SYMBOL()(屏蔽BAR寄存器中的信息位)。现在得出BAR0指向的区域的大小:

  • 保存BAR的原始值
  • 将所有1的值写入BAR寄存器
  • 读回来
  • 屏蔽信息位
  • 执行按位NOT并将值递增1
  • 恢复原始BAR值

大小值为0x100000,即1M,这使得所有偏移都为20位长,因此要验证偏移量,我们可以简单地应用掩码0xfffff:

0xCDE00000 & 0xFFFFFFF0 = 0xCDE00000

0 个答案:

没有答案