]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/kext_alloc.c
xnu-4570.71.2.tar.gz
[apple/xnu.git] / osfmk / kern / kext_alloc.c
index 336e58d07cd506d3536b10a4fc1a7098d91ae36f..479d114e32824c1a73fd18ac35d1992bca3fea85 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <mach-o/loader.h>
 #include <libkern/kernel_mach_header.h>
+#include <san/kasan.h>
 
 #define KASLR_IOREG_DEBUG 0
 
@@ -104,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);
@@ -149,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,
@@ -165,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;
@@ -181,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;