#include <mach-o/loader.h>
#include <libkern/kernel_mach_header.h>
+#include <san/kasan.h>
#define KASLR_IOREG_DEBUG 0
*/
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);
* 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;
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);
* 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,
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;
*_addr = (vm_offset_t)addr;
rval = KERN_SUCCESS;
+#if KASAN
+ kasan_notify_address(addr, size);
+#endif
finish:
return rval;