更改允许用户访问的内核页面权限

时间:2014-06-25 07:47:57

标签: linux segmentation-fault kernel mmu

在x86或x64 Linux中,我试图创建一个更改特定内核页面权限的内核模块,以允许用户应用程序访问该内存。例如,如果在0xC0001000处有一个可读的内核页面(比如它的3:1拆分),我想更改此页面的用户/管理程序位,并允许用户应用程序执行类似的操作。

int* m = 0xC0001000;
printf("reading kernel memory from user : %08x\n", *m);

在我的内核模块中,我将相应内核内存页的访问位从0x67更改为0x63(低位111 - > 011),清除了超级用户位。

之后,我使用invdpg指令刷新了虚拟地址0xc0001000的TLB。 我已经确认我操作的页面条目确实是相应的。 但是,从用户应用程序访问0xC0001000仍然会导致分段错误。 我错过了一些重要的东西吗?也许cs细分和GDT?或者那是不相关的?

一些建议会很好,谢谢你提前:)

1 个答案:

答案 0 :(得分:0)

从您的内核模块中,您只需将有效用户ID更改为0即可将其读取为/dev/kmem