Remove protector pages
This commit is contained in:
parent
51a4007bba
commit
ce0cfb2e11
@ -211,28 +211,6 @@ void unmap_pages(void* start_virt,uint32_t num_pages) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char make_protector(int page) {
|
|
||||||
int table=page>>10;
|
|
||||||
if (is_page_present(page)) return 0;
|
|
||||||
page=page&0x3FF;
|
|
||||||
smap_page_tables[table+1]=(smap[table]&0xFFFFFC00)|0x3;
|
|
||||||
uint32_t page_val=smap[(1024+(1024*table))+page];
|
|
||||||
page_val=page_val&(~0x6);
|
|
||||||
page_val=page_val|0x800;
|
|
||||||
smap[(1024+(1024*table))+page]=page_val;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char is_in_protector(void* addr) {
|
|
||||||
int page=((uint32_t)addr)>>12;
|
|
||||||
if (is_page_present(page)) return 0;
|
|
||||||
int table=page>>10;
|
|
||||||
page=page&0x3FF;
|
|
||||||
smap_page_tables[table+1]=(smap[table]&0xFFFFFC00)|0x3;
|
|
||||||
return smap[(1024+(1024*table))+page]&0x800;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void paging_init() {
|
void paging_init() {
|
||||||
for (uint32_t i=0;i<NUM_KERN_FRAMES;i++) {
|
for (uint32_t i=0;i<NUM_KERN_FRAMES;i++) {
|
||||||
kern_page_tables[i]=(i<<12)|0x3;
|
kern_page_tables[i]=(i<<12)|0x3;
|
||||||
|
@ -17,13 +17,11 @@ void setup_kstack(Thread* thread,uint32_t param1,uint32_t param2,char kmode,void
|
|||||||
uint32_t top_idx=(1024*(kstack_num+1));
|
uint32_t top_idx=(1024*(kstack_num+1));
|
||||||
thread->kernel_esp=((uint32_t)(&kstacks[top_idx-7]));
|
thread->kernel_esp=((uint32_t)(&kstacks[top_idx-7]));
|
||||||
thread->kernel_esp_top=thread->kernel_esp;
|
thread->kernel_esp_top=thread->kernel_esp;
|
||||||
kstacks[top_idx-3]=(uint32_t)task_init;
|
|
||||||
uint32_t* user_stack=(uint32_t*)(((uint32_t)alloc_pages(2))+0x2000);
|
uint32_t* user_stack=(uint32_t*)(((uint32_t)alloc_pages(2))+0x2000);
|
||||||
int buffer_pg_num=(((uint32_t)user_stack)-0x2000)>>12;
|
|
||||||
make_protector(buffer_pg_num);
|
|
||||||
user_stack-=2;
|
user_stack-=2;
|
||||||
user_stack[0]=param1;
|
user_stack[0]=param1;
|
||||||
user_stack[1]=param2;
|
user_stack[1]=param2;
|
||||||
|
kstacks[top_idx-3]=(uint32_t)task_init;
|
||||||
kstacks[top_idx-2]=(uint32_t)user_stack;
|
kstacks[top_idx-2]=(uint32_t)user_stack;
|
||||||
kstacks[top_idx-1]=(uint32_t)eip;
|
kstacks[top_idx-1]=(uint32_t)eip;
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,6 @@ void load_address_space(void* cr3);
|
|||||||
void* virt_to_phys(void* virt_addr);
|
void* virt_to_phys(void* virt_addr);
|
||||||
void* find_free_pages(int num_pages);
|
void* find_free_pages(int num_pages);
|
||||||
void load_smap(void* cr3);
|
void load_smap(void* cr3);
|
||||||
char make_protector(int page);
|
|
||||||
char is_in_protector(void* addr);
|
|
||||||
void* get_cr3();
|
void* get_cr3();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user