/ dev / mem的访问权限

|| 我有一些关于questions0ѭ的问题: 网络上的许多文章似乎都将“ 0”称为通向“ 2”的门户。但是,如果我说得对,则“ 0”是通往处理器“ 4”的网关,其中可能包括许多硬件外设的控制寄存器,而不仅仅是RAM?请纠正我,如果我错了! 为了防止攻击者滥用ѭ0和更改内核内存,需要启用标志
CONFIG_STRICT_DEVMEM
,这将阻止用户应用访问1MB以上的物理地址空间。我在PC(Ubuntu)上检查了配置文件,发现ѭ7。我写了一个程序,试图读取超过1 MB的物理内存,然后我就能读取了!无分段错误或任何“ 8”错误。这怎么可能? 我的程序大致如下所示:
fd = open ( \"/dev/mem\", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf(\"%d\", *ptr);
    
已邀请:
是的,您是对的,/ dev / mem允许您映射任何物理地址,包括非RAM内存映射的IO。这对于快速而又肮脏的黑客无需编写内核驱动程序即可访问某些硬件设备很有用。 CONFIG_STRICT_DEVMEM在dev11ѭ中用
devmem_is_allowed()
在/ dev / mem中使内核检查地址,并且其中的注释说明:
* On x86, access has to be given to the first megabyte of ram because that area
* contains bios code and data regions used by X and dosemu and similar apps.
* Access has to be given to non-kernel-ram areas as well, these contain the PCI
* mmio resources as well as potential bios/acpi data regions.
您的地址
0xFFFF0000
很可能是非RAM,因为BIOS通常会将IO内存放在4GB以下,因此这就是即使使用STRICT_DEVMEM也可以映射它的原因。     
跟踪结果如何:
cat /dev/mem | wc
我得到:
cat: /dev/mem: Operation not permitted
   1908   11791 1048576
所以对我来说,它的确停止在1MB。 请注意,cat使用开放而不是mmap,因此它不是相同的测试。 您确定读取的内容超出1MB吗?     

要回复问题请先登录注册