MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / CheckUsermodePointer

Function CheckUsermodePointer

Kernel/src/arch/x86_64/paging.cpp:218–238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

216 }
217
218 bool CheckUsermodePointer(uintptr_t addr, uint64_t len, address_space_t* addressSpace){
219 if(addr >> 48) return 0; // Non-canonical or higher-half address
220
221 if(!(addressSpace->pageDirs[PDPT_GET_INDEX(addr)][PAGE_DIR_GET_INDEX(addr)] & (PAGE_PRESENT))){
222 return 0;
223 }
224
225 if(!(addressSpace->pageDirs[PDPT_GET_INDEX(addr + len)][PAGE_DIR_GET_INDEX(addr + len)] & (PAGE_PRESENT))){
226 return 0;
227 }
228
229 if(!((addressSpace->pageTables[PDPT_GET_INDEX(addr)][PAGE_DIR_GET_INDEX(addr)][PAGE_TABLE_GET_INDEX(addr)] & (PAGE_PRESENT)) && addressSpace->pageTables[PDPT_GET_INDEX(addr)][PAGE_DIR_GET_INDEX(addr)][PAGE_TABLE_GET_INDEX(addr)] & (PAGE_USER))){
230 return 0;
231 }
232
233 if(!((addressSpace->pageTables[PDPT_GET_INDEX(addr + len)][PAGE_DIR_GET_INDEX(addr + len)][PAGE_TABLE_GET_INDEX(addr + len)] & (PAGE_PRESENT)) && addressSpace->pageTables[PDPT_GET_INDEX(addr + len)][PAGE_DIR_GET_INDEX(addr + len)][PAGE_TABLE_GET_INDEX(addr + len)] & (PAGE_USER))){
234 return 0;
235 }
236
237 return 1;
238 }
239
240 page_table_t AllocatePageTable(){
241 void* virt = KernelAllocate4KPages(1);

Callers 15

SysReadFunction · 0.85
SysWriteFunction · 0.85
SysLinkFunction · 0.85
SysUnlinkFunction · 0.85
SysStatFunction · 0.85
SysMkdirFunction · 0.85
SysRmdirFunction · 0.85
SysRenameFunction · 0.85
SysReadDirNextFunction · 0.85
SysReadDirFunction · 0.85
SysPReadFunction · 0.85
SysPWriteFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected