Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 更改内核页面权限以允许用户访问_Linux_Segmentation Fault_Kernel_Mmu - Fatal编程技术网

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

Linux 更改内核页面权限以允许用户访问,linux,segmentation-fault,kernel,mmu,Linux,Segmentation Fault,Kernel,Mmu,在x86或x64linux中,我试图创建一个内核模块,该模块更改特定的内核页面权限,以允许用户应用程序访问该内存。例如,如果0xC0001000处有一个可读的内核页面,比如说它是3:1拆分,我想更改此页面的用户/主管位,并允许用户应用程序执行类似的操作 int* m = 0xC0001000; printf("reading kernel memory from user : %08x\n", *m); 在我的内核模块中,我将相应内核内存页的访问位从0x67更改为0x63低位111->011,

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

int* m = 0xC0001000;
printf("reading kernel memory from user : %08x\n", *m);
在我的内核模块中,我将相应内核内存页的访问位从0x67更改为0x63低位111->011,以清除管理器位

之后,我使用invdpg指令刷新了虚拟地址0xc0001000的TLB。 我已经确认我操纵的页面条目确实是对应的条目。 但是,从用户应用程序访问0xC0001000仍然会导致me分段错误。 我是不是错过了什么重要的东西?也许是cs部分和GDT?还是说这无关紧要


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

从您的内核模块,您只需将有效用户id更改为0即可读取,

谢谢,但这不是我想要的。。。我想要的是让用户applicationCPL3直接访问内核虚拟地址。这就是目标吗self@daehee嗯,/dev/kmem是内核虚拟地址空间,对于用户空间应用程序来说,访问它所需要的只是根权限。