没有input太多的细节,我正在写一个fpga pci板的设备驱动程序,具有DMAfunction。 在这种情况下,板卡会在内存中写入一些ACK数据。 这个数据实际上是一个指向先前分配的内存结构的指针,指针通过寄存器被通知给主板。 所以,我使用板上的数据来解引用一个内存区域。 由于我们仍然处于这个电路板的debugging阶段,所以我不能完全确定DMA写入的数据,所以恰好要去掉一个无效指针(因为DMA写入的数据不一致)。
我的问题是:有没有办法在访问它之前检查内存指针(从内核空间),而不会产生无效的访问和/或内核恐慌?
在32位系统上,虚拟内存寻址按以下方式进行
0x00000000 0xc0000000 0xffffffff | | | +------------------------+----------+ | User | coreel | | space | space | +------------------------+----------+
所以,如果我没有错,你总是可以检查你的指针是否在以下范围内(这是低内存)
0xc0000000 - 0xffffffff 3'221'225'472 - 4'294'967'295
但是我不是Linux内核专家,所以可能有更好更安全的方法来实现这一点