linux内核内存读写属性更改的问题

在arm体系下,内核在较早版本的读写限制没有开启,至少在4.4版本之前。但是在4.19之后的内核,默认开启。

这里有个set_mem_rw(unsigned long ,int)
在19版本上理论上可以更改内存的读写属性,但是采取

set_mem_rw = (void *)kallsyms_lookup_name("set_memory_rw");

进行导出引用,发现根本不管用。我还以为这里内核写的有错误。

linux内核内存读写属性更改的问题_第1张图片
这里这个chang_memory_common是内核中的set_mem_rw的主要实现。

我们看到红色框里面的flag & VM_ALLOC 标志如果不属于这个,那么就直接退出。
linux内核内存读写属性更改的问题_第2张图片
据此,我们导出内存属性中的flagz并做了更改,如黄色框图显示。
再次调用导出set_mem_rw,发现内存成功试下更改。

可见,这个内核函数在做属性更改的同时做了标志检查,但是还是存在绕过的可能。

你可能感兴趣的:(linux)