X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/316670eb35587141e969394ae8537d66b9211e80..d26ffc64f583ab2d29df48f13518685602bc8832:/osfmk/kern/kext_alloc.c diff --git a/osfmk/kern/kext_alloc.c b/osfmk/kern/kext_alloc.c index c44446335..479d114e3 100644 --- a/osfmk/kern/kext_alloc.c +++ b/osfmk/kern/kext_alloc.c @@ -38,6 +38,7 @@ #include #include +#include #define KASLR_IOREG_DEBUG 0 @@ -75,9 +76,11 @@ kext_alloc_init(void) */ text = getsegbyname(SEG_TEXT); - text_start = vm_map_trunc_page(text->vmaddr); + text_start = vm_map_trunc_page(text->vmaddr, + VM_MAP_PAGE_MASK(kernel_map)); text_start &= ~((512ULL * 1024 * 1024 * 1024) - 1); - text_end = vm_map_round_page(text->vmaddr + text->vmsize); + text_end = vm_map_round_page(text->vmaddr + text->vmsize, + VM_MAP_PAGE_MASK(kernel_map)); text_size = text_end - text_start; kext_alloc_base = KEXT_ALLOC_BASE(text_end); @@ -91,7 +94,8 @@ kext_alloc_init(void) * kexts */ kext_post_boot_base = - vm_map_round_page(kext_alloc_base + prelinkTextSegment->vmsize); + vm_map_round_page(kext_alloc_base + prelinkTextSegment->vmsize, + VM_MAP_PAGE_MASK(kernel_map)); } else { kext_post_boot_base = kext_alloc_base; @@ -101,6 +105,7 @@ kext_alloc_init(void) rval = kmem_suballoc(kernel_map, (vm_offset_t *) &kext_alloc_base, kext_alloc_size, /* pageable */ TRUE, VM_FLAGS_FIXED|VM_FLAGS_OVERWRITE, + VM_MAP_KERNEL_FLAGS_NONE, VM_KERN_MEMORY_KEXT, &g_kext_map); if (rval != KERN_SUCCESS) { panic("kext_alloc_init: kmem_suballoc failed 0x%x\n", rval); @@ -146,11 +151,12 @@ kext_alloc(vm_offset_t *_addr, vm_size_t size, boolean_t fixed) * fixed (post boot) kext allocations to start looking for free space * just past where prelinked kexts have loaded. */ - rval = mach_vm_map(g_kext_map, + rval = mach_vm_map_kernel(g_kext_map, &addr, size, 0, flags, + VM_KERN_MEMORY_KEXT, MACH_PORT_NULL, 0, TRUE, @@ -162,7 +168,7 @@ kext_alloc(vm_offset_t *_addr, vm_size_t size, boolean_t fixed) goto finish; } #else - rval = mach_vm_allocate(g_kext_map, &addr, size, flags); + rval = mach_vm_allocate_kernel(g_kext_map, &addr, size, flags, VM_KERN_MEMORY_KEXT); if (rval != KERN_SUCCESS) { printf("vm_allocate failed - %d\n", rval); goto finish; @@ -178,6 +184,9 @@ kext_alloc(vm_offset_t *_addr, vm_size_t size, boolean_t fixed) *_addr = (vm_offset_t)addr; rval = KERN_SUCCESS; +#if KASAN + kasan_notify_address(addr, size); +#endif finish: return rval;