xref: /xnu-8020.140.41/osfmk/kern/kmod.c (revision 27b03b360a988dfd3dfdf34262bb0042026747cc)
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
kmod_create(host_priv_t host_priv __unused,vm_address_t addr __unused,kmod_t * id __unused)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
kmod_destroy(host_priv_t host_priv __unused,kmod_t id __unused)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
kmod_control(host_priv_t host_priv __unused,kmod_t id __unused,kmod_control_flavor_t flavor __unused,kmod_args_t * data __unused,mach_msg_type_number_t * dataCount __unused)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
kmod_get_info(host_t host __unused,kmod_info_array_t * kmod_list KMOD_MIG_UNUSED,mach_msg_type_number_t * kmodCount KMOD_MIG_UNUSED)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 }
146