kmod.c
1 /* 2 * Copyright (c) 2000-2019 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 /* 29 * NOTICE: This file was modified by McAfee Research in 2004 to introduce 30 * support for mandatory and extensible security protections. This notice 31 * is included in support of clause 2.2 (b) of the Apple Public License, 32 * Version 2.0. 33 */ 34 /* 35 * Copyright (c) 1999 Apple Inc. All rights reserved. 36 * 37 * HISTORY 38 * 39 * 1999 Mar 29 rsulack created. 40 */ 41 42 #include <mach/mach_types.h> 43 #include <mach/vm_types.h> 44 #include <mach/kern_return.h> 45 #include <mach/host_priv_server.h> 46 #include <mach/vm_map.h> 47 48 #include <kern/kern_types.h> 49 #include <kern/thread.h> 50 51 #include <vm/vm_kern.h> 52 53 #include <libkern/kernel_mach_header.h> 54 55 /********************************************************************* 56 ********************************************************************** 57 *** KMOD INTERFACE DEPRECATED AS OF SNOWLEOPARD *** 58 ********************************************************************** 59 ********************************************************************** 60 * Except for kmod_get_info(), which continues to work for K32 with 61 * 32-bit clients, all remaining functions in this module remain 62 * for symbol linkage or MIG support only, 63 * and return KERN_NOT_SUPPORTED. 64 * 65 * Some kernel-internal portions have been moved to 66 * libkern/OSKextLib.cpp and libkern/c++/OSKext.cpp. 67 **********************************************************************/ 68 69 // bsd/sys/proc.h 70 extern void proc_selfname(char * buf, int size); 71 72 #define NOT_SUPPORTED_USER64() \ 73 do { \ 74 char procname[64] = "unknown"; \ 75 proc_selfname(procname, sizeof(procname)); \ 76 printf("%s is not supported for 64-bit clients (called from %s)\n", \ 77 __FUNCTION__, procname); \ 78 } while (0) 79 80 #define NOT_SUPPORTED_KERNEL() \ 81 do { \ 82 char procname[64] = "unknown"; \ 83 proc_selfname(procname, sizeof(procname)); \ 84 printf("%s is not supported on this kernel architecture (called from %s)\n", \ 85 __FUNCTION__, procname); \ 86 } while (0) 87 88 #define KMOD_MIG_UNUSED __unused 89 90 91 /********************************************************************* 92 * Old MIG routines that are no longer supported. 93 ********************************************************************** 94 * We have to keep these around for ppc, i386, and x86_64. A 32-bit 95 * user-space client might call into the 64-bit kernel. Only 96 * kmod_get_info() retains a functional implementation (ppc/i386). 97 **********************************************************************/ 98 kern_return_t 99 kmod_create( 100 host_priv_t host_priv __unused, 101 vm_address_t addr __unused, 102 kmod_t * id __unused) 103 { 104 NOT_SUPPORTED_KERNEL(); 105 return KERN_NOT_SUPPORTED; 106 } 107 108 /********************************************************************/ 109 kern_return_t 110 kmod_destroy( 111 host_priv_t host_priv __unused, 112 kmod_t id __unused) 113 { 114 NOT_SUPPORTED_KERNEL(); 115 return KERN_NOT_SUPPORTED; 116 } 117 118 /********************************************************************/ 119 kern_return_t 120 kmod_control( 121 host_priv_t host_priv __unused, 122 kmod_t id __unused, 123 kmod_control_flavor_t flavor __unused, 124 kmod_args_t * data __unused, 125 mach_msg_type_number_t * dataCount __unused) 126 { 127 NOT_SUPPORTED_KERNEL(); 128 return KERN_NOT_SUPPORTED; 129 } 130 131 /********************************************************************/ 132 kern_return_t 133 kmod_get_info( 134 host_t host __unused, 135 kmod_info_array_t * kmod_list KMOD_MIG_UNUSED, 136 mach_msg_type_number_t * kmodCount KMOD_MIG_UNUSED); 137 kern_return_t 138 kmod_get_info( 139 host_t host __unused, 140 kmod_info_array_t * kmod_list KMOD_MIG_UNUSED, 141 mach_msg_type_number_t * kmodCount KMOD_MIG_UNUSED) 142 { 143 NOT_SUPPORTED_KERNEL(); 144 return KERN_NOT_SUPPORTED; 145 }