linux内核内存读写属性更改的问题
·
在arm体系下,内核在较早版本的读写限制没有开启,至少在4.4版本之前。但是在4.19之后的内核,默认开启。
这里有个set_mem_rw(unsigned long ,int)
在19版本上理论上可以更改内存的读写属性,但是采取
set_mem_rw = (void *)kallsyms_lookup_name("set_memory_rw");
进行导出引用,发现根本不管用。我还以为这里内核写的有错误。

这里这个chang_memory_common是内核中的set_mem_rw的主要实现。
我们看到红色框里面的flag & VM_ALLOC 标志如果不属于这个,那么就直接退出。

据此,我们导出内存属性中的flagz并做了更改,如黄色框图显示。
再次调用导出set_mem_rw,发现内存成功试下更改。
可见,这个内核函数在做属性更改的同时做了标志检查,但是还是存在绕过的可能。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)