1*4f1223e8SApple OSS Distributions /*
2*4f1223e8SApple OSS Distributions * Copyright (c) 2008-2016 Apple Inc. All rights reserved.
3*4f1223e8SApple OSS Distributions *
4*4f1223e8SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*4f1223e8SApple OSS Distributions *
6*4f1223e8SApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code
7*4f1223e8SApple OSS Distributions * as defined in and that are subject to the Apple Public Source License
8*4f1223e8SApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in
9*4f1223e8SApple OSS Distributions * compliance with the License. The rights granted to you under the License
10*4f1223e8SApple OSS Distributions * may not be used to create, or enable the creation or redistribution of,
11*4f1223e8SApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to
12*4f1223e8SApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any
13*4f1223e8SApple OSS Distributions * terms of an Apple operating system software license agreement.
14*4f1223e8SApple OSS Distributions *
15*4f1223e8SApple OSS Distributions * Please obtain a copy of the License at
16*4f1223e8SApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*4f1223e8SApple OSS Distributions *
18*4f1223e8SApple OSS Distributions * The Original Code and all software distributed under the License are
19*4f1223e8SApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*4f1223e8SApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*4f1223e8SApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*4f1223e8SApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*4f1223e8SApple OSS Distributions * Please see the License for the specific language governing rights and
24*4f1223e8SApple OSS Distributions * limitations under the License.
25*4f1223e8SApple OSS Distributions *
26*4f1223e8SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*4f1223e8SApple OSS Distributions */
28*4f1223e8SApple OSS Distributions /*
29*4f1223e8SApple OSS Distributions * @OSF_COPYRIGHT@
30*4f1223e8SApple OSS Distributions */
31*4f1223e8SApple OSS Distributions /*
32*4f1223e8SApple OSS Distributions * Mach Operating System
33*4f1223e8SApple OSS Distributions * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
34*4f1223e8SApple OSS Distributions * All Rights Reserved.
35*4f1223e8SApple OSS Distributions *
36*4f1223e8SApple OSS Distributions * Permission to use, copy, modify and distribute this software and its
37*4f1223e8SApple OSS Distributions * documentation is hereby granted, provided that both the copyright
38*4f1223e8SApple OSS Distributions * notice and this permission notice appear in all copies of the
39*4f1223e8SApple OSS Distributions * software, derivative works or modified versions, and any portions
40*4f1223e8SApple OSS Distributions * thereof, and that both notices appear in supporting documentation.
41*4f1223e8SApple OSS Distributions *
42*4f1223e8SApple OSS Distributions * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
43*4f1223e8SApple OSS Distributions * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
44*4f1223e8SApple OSS Distributions * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
45*4f1223e8SApple OSS Distributions *
46*4f1223e8SApple OSS Distributions * Carnegie Mellon requests users of this software to return to
47*4f1223e8SApple OSS Distributions *
48*4f1223e8SApple OSS Distributions * Software Distribution Coordinator or [email protected]
49*4f1223e8SApple OSS Distributions * School of Computer Science
50*4f1223e8SApple OSS Distributions * Carnegie Mellon University
51*4f1223e8SApple OSS Distributions * Pittsburgh PA 15213-3890
52*4f1223e8SApple OSS Distributions *
53*4f1223e8SApple OSS Distributions * any improvements or extensions that they make and grant Carnegie Mellon
54*4f1223e8SApple OSS Distributions * the rights to redistribute these changes.
55*4f1223e8SApple OSS Distributions */
56*4f1223e8SApple OSS Distributions /*
57*4f1223e8SApple OSS Distributions */
58*4f1223e8SApple OSS Distributions /*
59*4f1223e8SApple OSS Distributions * File: vm/vm32_user.c
60*4f1223e8SApple OSS Distributions * Author: Avadis Tevanian, Jr., Michael Wayne Young
61*4f1223e8SApple OSS Distributions *
62*4f1223e8SApple OSS Distributions * User-exported virtual memory functions.
63*4f1223e8SApple OSS Distributions */
64*4f1223e8SApple OSS Distributions
65*4f1223e8SApple OSS Distributions #include <debug.h>
66*4f1223e8SApple OSS Distributions
67*4f1223e8SApple OSS Distributions #include <mach/boolean.h>
68*4f1223e8SApple OSS Distributions #include <mach/kern_return.h>
69*4f1223e8SApple OSS Distributions #include <mach/mach_types.h> /* to get vm_address_t */
70*4f1223e8SApple OSS Distributions #include <mach/memory_object.h>
71*4f1223e8SApple OSS Distributions #include <mach/std_types.h> /* to get pointer_t */
72*4f1223e8SApple OSS Distributions #include <mach/vm_attributes.h>
73*4f1223e8SApple OSS Distributions #include <mach/vm_param.h>
74*4f1223e8SApple OSS Distributions #include <mach/vm_statistics.h>
75*4f1223e8SApple OSS Distributions #include <mach/mach_syscalls.h>
76*4f1223e8SApple OSS Distributions
77*4f1223e8SApple OSS Distributions #include <mach/host_priv_server.h>
78*4f1223e8SApple OSS Distributions #include <mach/mach_vm_server.h>
79*4f1223e8SApple OSS Distributions #include <mach/vm32_map_server.h>
80*4f1223e8SApple OSS Distributions
81*4f1223e8SApple OSS Distributions #include <kern/host.h>
82*4f1223e8SApple OSS Distributions #include <kern/task.h>
83*4f1223e8SApple OSS Distributions #include <kern/misc_protos.h>
84*4f1223e8SApple OSS Distributions #include <vm/vm_fault.h>
85*4f1223e8SApple OSS Distributions #include <vm/vm_map_internal.h>
86*4f1223e8SApple OSS Distributions #include <vm/vm_object_xnu.h>
87*4f1223e8SApple OSS Distributions #include <vm/vm_page.h>
88*4f1223e8SApple OSS Distributions #include <vm/memory_object.h>
89*4f1223e8SApple OSS Distributions #include <vm/vm_pageout.h>
90*4f1223e8SApple OSS Distributions #include <vm/vm_protos.h>
91*4f1223e8SApple OSS Distributions #include <vm/vm_iokit.h>
92*4f1223e8SApple OSS Distributions #include <vm/vm_sanitize_internal.h>
93*4f1223e8SApple OSS Distributions #include <vm/vm_map_internal.h>
94*4f1223e8SApple OSS Distributions
95*4f1223e8SApple OSS Distributions #ifdef VM32_SUPPORT
96*4f1223e8SApple OSS Distributions
97*4f1223e8SApple OSS Distributions /*
98*4f1223e8SApple OSS Distributions * See vm_user.c for the real implementation of all of these functions.
99*4f1223e8SApple OSS Distributions * We call through to the mach_ "wide" versions of the routines, and trust
100*4f1223e8SApple OSS Distributions * that the VM system verifies the arguments and only returns address that
101*4f1223e8SApple OSS Distributions * are appropriate for the task's address space size.
102*4f1223e8SApple OSS Distributions *
103*4f1223e8SApple OSS Distributions * New VM call implementations should not be added here, because they would
104*4f1223e8SApple OSS Distributions * be available only to 32-bit userspace clients. Add them to vm_user.c
105*4f1223e8SApple OSS Distributions * and the corresponding prototype to mach_vm.defs (subsystem 4800).
106*4f1223e8SApple OSS Distributions */
107*4f1223e8SApple OSS Distributions
108*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_allocate(vm_map_t map,vm32_address_ut * addr32,vm32_size_ut size32,int flags)109*4f1223e8SApple OSS Distributions vm32_vm_allocate(
110*4f1223e8SApple OSS Distributions vm_map_t map,
111*4f1223e8SApple OSS Distributions vm32_address_ut *addr32,
112*4f1223e8SApple OSS Distributions vm32_size_ut size32,
113*4f1223e8SApple OSS Distributions int flags)
114*4f1223e8SApple OSS Distributions {
115*4f1223e8SApple OSS Distributions mach_vm_address_ut addr;
116*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
117*4f1223e8SApple OSS Distributions kern_return_t kr;
118*4f1223e8SApple OSS Distributions
119*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
120*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
121*4f1223e8SApple OSS Distributions kr = mach_vm_allocate_external(map, &addr, size, flags);
122*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
123*4f1223e8SApple OSS Distributions
124*4f1223e8SApple OSS Distributions return kr;
125*4f1223e8SApple OSS Distributions }
126*4f1223e8SApple OSS Distributions
127*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_deallocate(vm_map_t map,vm32_offset_ut start32,vm32_size_ut size32)128*4f1223e8SApple OSS Distributions vm32_vm_deallocate(
129*4f1223e8SApple OSS Distributions vm_map_t map,
130*4f1223e8SApple OSS Distributions vm32_offset_ut start32,
131*4f1223e8SApple OSS Distributions vm32_size_ut size32)
132*4f1223e8SApple OSS Distributions {
133*4f1223e8SApple OSS Distributions mach_vm_offset_ut start;
134*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
135*4f1223e8SApple OSS Distributions vm32_address_ut discard;
136*4f1223e8SApple OSS Distributions
137*4f1223e8SApple OSS Distributions if (vm_sanitize_add_overflow(start32, size32, &discard)) {
138*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
139*4f1223e8SApple OSS Distributions }
140*4f1223e8SApple OSS Distributions
141*4f1223e8SApple OSS Distributions start = vm_sanitize_expand_addr_to_64(start32);
142*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
143*4f1223e8SApple OSS Distributions
144*4f1223e8SApple OSS Distributions return mach_vm_deallocate(map, start, size);
145*4f1223e8SApple OSS Distributions }
146*4f1223e8SApple OSS Distributions
147*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_inherit(vm_map_t map,vm32_offset_ut start32,vm32_size_ut size32,vm_inherit_ut new_inheritance)148*4f1223e8SApple OSS Distributions vm32_vm_inherit(
149*4f1223e8SApple OSS Distributions vm_map_t map,
150*4f1223e8SApple OSS Distributions vm32_offset_ut start32,
151*4f1223e8SApple OSS Distributions vm32_size_ut size32,
152*4f1223e8SApple OSS Distributions vm_inherit_ut new_inheritance)
153*4f1223e8SApple OSS Distributions {
154*4f1223e8SApple OSS Distributions mach_vm_offset_ut start;
155*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
156*4f1223e8SApple OSS Distributions vm32_address_ut discard;
157*4f1223e8SApple OSS Distributions
158*4f1223e8SApple OSS Distributions if (map == VM_MAP_NULL ||
159*4f1223e8SApple OSS Distributions vm_sanitize_add_overflow(start32, size32, &discard)) {
160*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
161*4f1223e8SApple OSS Distributions }
162*4f1223e8SApple OSS Distributions
163*4f1223e8SApple OSS Distributions start = vm_sanitize_expand_addr_to_64(start32);
164*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
165*4f1223e8SApple OSS Distributions
166*4f1223e8SApple OSS Distributions return mach_vm_inherit(map,
167*4f1223e8SApple OSS Distributions start,
168*4f1223e8SApple OSS Distributions size,
169*4f1223e8SApple OSS Distributions new_inheritance);
170*4f1223e8SApple OSS Distributions }
171*4f1223e8SApple OSS Distributions
172*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_protect(vm_map_t map,vm32_offset_ut start32,vm32_size_ut size32,boolean_t set_maximum,vm_prot_ut new_protection)173*4f1223e8SApple OSS Distributions vm32_vm_protect(
174*4f1223e8SApple OSS Distributions vm_map_t map,
175*4f1223e8SApple OSS Distributions vm32_offset_ut start32,
176*4f1223e8SApple OSS Distributions vm32_size_ut size32,
177*4f1223e8SApple OSS Distributions boolean_t set_maximum,
178*4f1223e8SApple OSS Distributions vm_prot_ut new_protection)
179*4f1223e8SApple OSS Distributions {
180*4f1223e8SApple OSS Distributions mach_vm_offset_ut start;
181*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
182*4f1223e8SApple OSS Distributions vm32_address_ut discard;
183*4f1223e8SApple OSS Distributions
184*4f1223e8SApple OSS Distributions if (map == VM_MAP_NULL ||
185*4f1223e8SApple OSS Distributions vm_sanitize_add_overflow(start32, size32, &discard)) {
186*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
187*4f1223e8SApple OSS Distributions }
188*4f1223e8SApple OSS Distributions
189*4f1223e8SApple OSS Distributions start = vm_sanitize_expand_addr_to_64(start32);
190*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
191*4f1223e8SApple OSS Distributions
192*4f1223e8SApple OSS Distributions return mach_vm_protect(map, start,
193*4f1223e8SApple OSS Distributions size,
194*4f1223e8SApple OSS Distributions set_maximum,
195*4f1223e8SApple OSS Distributions new_protection);
196*4f1223e8SApple OSS Distributions }
197*4f1223e8SApple OSS Distributions
198*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_machine_attribute(vm_map_t map,vm32_address_ut addr32,vm32_size_ut size32,vm_machine_attribute_t attribute,vm_machine_attribute_val_t * value)199*4f1223e8SApple OSS Distributions vm32_vm_machine_attribute(
200*4f1223e8SApple OSS Distributions vm_map_t map,
201*4f1223e8SApple OSS Distributions vm32_address_ut addr32,
202*4f1223e8SApple OSS Distributions vm32_size_ut size32,
203*4f1223e8SApple OSS Distributions vm_machine_attribute_t attribute,
204*4f1223e8SApple OSS Distributions vm_machine_attribute_val_t *value) /* IN/OUT */
205*4f1223e8SApple OSS Distributions {
206*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
207*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
208*4f1223e8SApple OSS Distributions vm32_address_ut discard;
209*4f1223e8SApple OSS Distributions
210*4f1223e8SApple OSS Distributions if (map == VM_MAP_NULL ||
211*4f1223e8SApple OSS Distributions vm_sanitize_add_overflow(addr32, size32, &discard)) {
212*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
213*4f1223e8SApple OSS Distributions }
214*4f1223e8SApple OSS Distributions
215*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
216*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
217*4f1223e8SApple OSS Distributions
218*4f1223e8SApple OSS Distributions return mach_vm_machine_attribute(map, addr, size, attribute, value);
219*4f1223e8SApple OSS Distributions }
220*4f1223e8SApple OSS Distributions
221*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_read(vm_map_t map,vm32_address_ut addr32,vm32_size_ut size32,pointer_ut * data,mach_msg_type_number_t * data_size)222*4f1223e8SApple OSS Distributions vm32_vm_read(
223*4f1223e8SApple OSS Distributions vm_map_t map,
224*4f1223e8SApple OSS Distributions vm32_address_ut addr32,
225*4f1223e8SApple OSS Distributions vm32_size_ut size32,
226*4f1223e8SApple OSS Distributions pointer_ut *data,
227*4f1223e8SApple OSS Distributions mach_msg_type_number_t *data_size)
228*4f1223e8SApple OSS Distributions {
229*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
230*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
231*4f1223e8SApple OSS Distributions
232*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
233*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
234*4f1223e8SApple OSS Distributions
235*4f1223e8SApple OSS Distributions return mach_vm_read(map, addr, size, data, data_size);
236*4f1223e8SApple OSS Distributions }
237*4f1223e8SApple OSS Distributions
238*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_read_list(vm_map_t map,vm32_read_entry_t data_list,natural_t count)239*4f1223e8SApple OSS Distributions vm32_vm_read_list(
240*4f1223e8SApple OSS Distributions vm_map_t map,
241*4f1223e8SApple OSS Distributions vm32_read_entry_t data_list,
242*4f1223e8SApple OSS Distributions natural_t count)
243*4f1223e8SApple OSS Distributions {
244*4f1223e8SApple OSS Distributions mach_vm_read_entry_t mdata_list;
245*4f1223e8SApple OSS Distributions mach_msg_type_number_t i;
246*4f1223e8SApple OSS Distributions kern_return_t result;
247*4f1223e8SApple OSS Distributions
248*4f1223e8SApple OSS Distributions for (i = 0; i < VM_MAP_ENTRY_MAX; i++) {
249*4f1223e8SApple OSS Distributions mdata_list[i].address = data_list[i].address;
250*4f1223e8SApple OSS Distributions mdata_list[i].size = data_list[i].size;
251*4f1223e8SApple OSS Distributions }
252*4f1223e8SApple OSS Distributions
253*4f1223e8SApple OSS Distributions result = mach_vm_read_list(map, mdata_list, count);
254*4f1223e8SApple OSS Distributions
255*4f1223e8SApple OSS Distributions for (i = 0; i < VM_MAP_ENTRY_MAX; i++) {
256*4f1223e8SApple OSS Distributions data_list[i].address = CAST_DOWN_EXPLICIT(vm32_address_t, mdata_list[i].address);
257*4f1223e8SApple OSS Distributions data_list[i].size = CAST_DOWN_EXPLICIT(vm32_size_t, mdata_list[i].size);
258*4f1223e8SApple OSS Distributions }
259*4f1223e8SApple OSS Distributions
260*4f1223e8SApple OSS Distributions return result;
261*4f1223e8SApple OSS Distributions }
262*4f1223e8SApple OSS Distributions
263*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_read_overwrite(vm_map_t map,vm32_address_ut addr32,vm32_size_ut size32,vm32_address_ut data32,vm32_size_ut * data_size32)264*4f1223e8SApple OSS Distributions vm32_vm_read_overwrite(
265*4f1223e8SApple OSS Distributions vm_map_t map,
266*4f1223e8SApple OSS Distributions vm32_address_ut addr32,
267*4f1223e8SApple OSS Distributions vm32_size_ut size32,
268*4f1223e8SApple OSS Distributions vm32_address_ut data32,
269*4f1223e8SApple OSS Distributions vm32_size_ut *data_size32)
270*4f1223e8SApple OSS Distributions {
271*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr, data;
272*4f1223e8SApple OSS Distributions mach_vm_size_ut size, data_size;
273*4f1223e8SApple OSS Distributions kern_return_t result;
274*4f1223e8SApple OSS Distributions
275*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
276*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
277*4f1223e8SApple OSS Distributions data = vm_sanitize_expand_addr_to_64(data32);
278*4f1223e8SApple OSS Distributions data_size = vm_sanitize_expand_size_to_64(*data_size32);
279*4f1223e8SApple OSS Distributions
280*4f1223e8SApple OSS Distributions result = mach_vm_read_overwrite(map, addr, size, data, &data_size);
281*4f1223e8SApple OSS Distributions *data_size32 = vm_sanitize_trunc_size_to_32(data_size);
282*4f1223e8SApple OSS Distributions
283*4f1223e8SApple OSS Distributions return result;
284*4f1223e8SApple OSS Distributions }
285*4f1223e8SApple OSS Distributions
286*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_write(vm_map_t map,vm32_address_ut addr32,pointer_ut data,mach_msg_type_number_t size)287*4f1223e8SApple OSS Distributions vm32_vm_write(
288*4f1223e8SApple OSS Distributions vm_map_t map,
289*4f1223e8SApple OSS Distributions vm32_address_ut addr32,
290*4f1223e8SApple OSS Distributions pointer_ut data,
291*4f1223e8SApple OSS Distributions mach_msg_type_number_t size)
292*4f1223e8SApple OSS Distributions {
293*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
294*4f1223e8SApple OSS Distributions
295*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
296*4f1223e8SApple OSS Distributions return mach_vm_write(map, addr, data, size);
297*4f1223e8SApple OSS Distributions }
298*4f1223e8SApple OSS Distributions
299*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_copy(vm_map_t map,vm32_address_ut src_addr32,vm32_size_ut size32,vm32_address_ut dst_addr32)300*4f1223e8SApple OSS Distributions vm32_vm_copy(
301*4f1223e8SApple OSS Distributions vm_map_t map,
302*4f1223e8SApple OSS Distributions vm32_address_ut src_addr32,
303*4f1223e8SApple OSS Distributions vm32_size_ut size32,
304*4f1223e8SApple OSS Distributions vm32_address_ut dst_addr32)
305*4f1223e8SApple OSS Distributions {
306*4f1223e8SApple OSS Distributions mach_vm_offset_ut src_addr, dst_addr;
307*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
308*4f1223e8SApple OSS Distributions
309*4f1223e8SApple OSS Distributions src_addr = vm_sanitize_expand_addr_to_64(src_addr32);
310*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
311*4f1223e8SApple OSS Distributions dst_addr = vm_sanitize_expand_addr_to_64(dst_addr32);
312*4f1223e8SApple OSS Distributions
313*4f1223e8SApple OSS Distributions return mach_vm_copy(map, src_addr, size, dst_addr);
314*4f1223e8SApple OSS Distributions }
315*4f1223e8SApple OSS Distributions
316*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_map_64(vm_map_t target_map,vm32_offset_ut * addr32,vm32_size_ut size32,vm32_offset_ut mask32,int flags,ipc_port_t port,memory_object_offset_ut offset,boolean_t copy,vm_prot_ut cur_protection,vm_prot_ut max_protection,vm_inherit_ut inheritance)317*4f1223e8SApple OSS Distributions vm32_vm_map_64(
318*4f1223e8SApple OSS Distributions vm_map_t target_map,
319*4f1223e8SApple OSS Distributions vm32_offset_ut *addr32,
320*4f1223e8SApple OSS Distributions vm32_size_ut size32,
321*4f1223e8SApple OSS Distributions vm32_offset_ut mask32,
322*4f1223e8SApple OSS Distributions int flags,
323*4f1223e8SApple OSS Distributions ipc_port_t port,
324*4f1223e8SApple OSS Distributions memory_object_offset_ut offset,
325*4f1223e8SApple OSS Distributions boolean_t copy,
326*4f1223e8SApple OSS Distributions vm_prot_ut cur_protection,
327*4f1223e8SApple OSS Distributions vm_prot_ut max_protection,
328*4f1223e8SApple OSS Distributions vm_inherit_ut inheritance)
329*4f1223e8SApple OSS Distributions {
330*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr, mask;
331*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
332*4f1223e8SApple OSS Distributions kern_return_t result;
333*4f1223e8SApple OSS Distributions
334*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
335*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
336*4f1223e8SApple OSS Distributions mask = vm_sanitize_expand_addr_to_64(mask32);
337*4f1223e8SApple OSS Distributions
338*4f1223e8SApple OSS Distributions result = mach_vm_map_external(target_map, &addr, size, mask,
339*4f1223e8SApple OSS Distributions flags, port, offset, copy,
340*4f1223e8SApple OSS Distributions cur_protection, max_protection, inheritance);
341*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
342*4f1223e8SApple OSS Distributions
343*4f1223e8SApple OSS Distributions return result;
344*4f1223e8SApple OSS Distributions }
345*4f1223e8SApple OSS Distributions
346*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_map(vm_map_t target_map,vm32_offset_ut * address,vm32_size_ut size,vm32_offset_ut mask,int flags,ipc_port_t port,vm32_offset_ut offset32,boolean_t copy,vm_prot_ut cur_protection,vm_prot_ut max_protection,vm_inherit_ut inheritance)347*4f1223e8SApple OSS Distributions vm32_vm_map(
348*4f1223e8SApple OSS Distributions vm_map_t target_map,
349*4f1223e8SApple OSS Distributions vm32_offset_ut *address,
350*4f1223e8SApple OSS Distributions vm32_size_ut size,
351*4f1223e8SApple OSS Distributions vm32_offset_ut mask,
352*4f1223e8SApple OSS Distributions int flags,
353*4f1223e8SApple OSS Distributions ipc_port_t port,
354*4f1223e8SApple OSS Distributions vm32_offset_ut offset32,
355*4f1223e8SApple OSS Distributions boolean_t copy,
356*4f1223e8SApple OSS Distributions vm_prot_ut cur_protection,
357*4f1223e8SApple OSS Distributions vm_prot_ut max_protection,
358*4f1223e8SApple OSS Distributions vm_inherit_ut inheritance)
359*4f1223e8SApple OSS Distributions {
360*4f1223e8SApple OSS Distributions memory_object_offset_ut offset;
361*4f1223e8SApple OSS Distributions
362*4f1223e8SApple OSS Distributions offset = vm_sanitize_expand_addr_to_64(offset32);
363*4f1223e8SApple OSS Distributions return vm32_vm_map_64(target_map, address, size, mask,
364*4f1223e8SApple OSS Distributions flags, port, offset, copy,
365*4f1223e8SApple OSS Distributions cur_protection, max_protection, inheritance);
366*4f1223e8SApple OSS Distributions }
367*4f1223e8SApple OSS Distributions
368*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_remap(vm_map_t target_map,vm32_offset_ut * addr32,vm32_size_ut size32,vm32_offset_ut mask32,boolean_t anywhere,vm_map_t src_map,vm32_offset_ut src_addr32,boolean_t copy,vm_prot_ut * cur_protection,vm_prot_ut * max_protection,vm_inherit_ut inheritance)369*4f1223e8SApple OSS Distributions vm32_vm_remap(
370*4f1223e8SApple OSS Distributions vm_map_t target_map,
371*4f1223e8SApple OSS Distributions vm32_offset_ut *addr32,
372*4f1223e8SApple OSS Distributions vm32_size_ut size32,
373*4f1223e8SApple OSS Distributions vm32_offset_ut mask32,
374*4f1223e8SApple OSS Distributions boolean_t anywhere,
375*4f1223e8SApple OSS Distributions vm_map_t src_map,
376*4f1223e8SApple OSS Distributions vm32_offset_ut src_addr32,
377*4f1223e8SApple OSS Distributions boolean_t copy,
378*4f1223e8SApple OSS Distributions vm_prot_ut *cur_protection,
379*4f1223e8SApple OSS Distributions vm_prot_ut *max_protection,
380*4f1223e8SApple OSS Distributions vm_inherit_ut inheritance)
381*4f1223e8SApple OSS Distributions {
382*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr, mask, src_addr;
383*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
384*4f1223e8SApple OSS Distributions kern_return_t result;
385*4f1223e8SApple OSS Distributions
386*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
387*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
388*4f1223e8SApple OSS Distributions mask = vm_sanitize_expand_addr_to_64(mask32);
389*4f1223e8SApple OSS Distributions src_addr = vm_sanitize_expand_addr_to_64(src_addr32);
390*4f1223e8SApple OSS Distributions
391*4f1223e8SApple OSS Distributions result = mach_vm_remap_external(target_map, &addr, size, mask,
392*4f1223e8SApple OSS Distributions anywhere, src_map, src_addr, copy,
393*4f1223e8SApple OSS Distributions cur_protection, max_protection, inheritance);
394*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
395*4f1223e8SApple OSS Distributions
396*4f1223e8SApple OSS Distributions
397*4f1223e8SApple OSS Distributions return result;
398*4f1223e8SApple OSS Distributions }
399*4f1223e8SApple OSS Distributions
400*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_msync(vm_map_t map,vm32_address_ut addr32,vm32_size_ut size32,vm_sync_t sync_flags)401*4f1223e8SApple OSS Distributions vm32_vm_msync(
402*4f1223e8SApple OSS Distributions vm_map_t map,
403*4f1223e8SApple OSS Distributions vm32_address_ut addr32,
404*4f1223e8SApple OSS Distributions vm32_size_ut size32,
405*4f1223e8SApple OSS Distributions vm_sync_t sync_flags)
406*4f1223e8SApple OSS Distributions {
407*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
408*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
409*4f1223e8SApple OSS Distributions
410*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
411*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
412*4f1223e8SApple OSS Distributions return mach_vm_msync(map, addr, size, sync_flags);
413*4f1223e8SApple OSS Distributions }
414*4f1223e8SApple OSS Distributions
415*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_behavior_set(vm_map_t map,vm32_offset_ut start32,vm32_size_ut size32,vm_behavior_ut new_behavior)416*4f1223e8SApple OSS Distributions vm32_vm_behavior_set(
417*4f1223e8SApple OSS Distributions vm_map_t map,
418*4f1223e8SApple OSS Distributions vm32_offset_ut start32,
419*4f1223e8SApple OSS Distributions vm32_size_ut size32,
420*4f1223e8SApple OSS Distributions vm_behavior_ut new_behavior)
421*4f1223e8SApple OSS Distributions {
422*4f1223e8SApple OSS Distributions vm_address_ut start;
423*4f1223e8SApple OSS Distributions vm_size_ut size;
424*4f1223e8SApple OSS Distributions vm32_address_ut discard;
425*4f1223e8SApple OSS Distributions
426*4f1223e8SApple OSS Distributions if (vm_sanitize_add_overflow(start32, size32, &discard)) {
427*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
428*4f1223e8SApple OSS Distributions }
429*4f1223e8SApple OSS Distributions
430*4f1223e8SApple OSS Distributions start = vm_sanitize_expand_addr_to_64(start32);
431*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(size32);
432*4f1223e8SApple OSS Distributions
433*4f1223e8SApple OSS Distributions return mach_vm_behavior_set(map, start, size, new_behavior);
434*4f1223e8SApple OSS Distributions }
435*4f1223e8SApple OSS Distributions
436*4f1223e8SApple OSS Distributions static inline kern_return_t
vm32_region_get_kern_return(kern_return_t kr,vm_offset_ut addr,vm_size_ut size)437*4f1223e8SApple OSS Distributions vm32_region_get_kern_return(
438*4f1223e8SApple OSS Distributions kern_return_t kr,
439*4f1223e8SApple OSS Distributions vm_offset_ut addr,
440*4f1223e8SApple OSS Distributions vm_size_ut size)
441*4f1223e8SApple OSS Distributions {
442*4f1223e8SApple OSS Distributions vm_offset_ut end = vm_sanitize_compute_ut_end(addr, size);
443*4f1223e8SApple OSS Distributions
444*4f1223e8SApple OSS Distributions if (KERN_SUCCESS == kr && VM_SANITIZE_UNSAFE_UNWRAP(end) > VM32_MAX_ADDRESS) {
445*4f1223e8SApple OSS Distributions return KERN_INVALID_ADDRESS;
446*4f1223e8SApple OSS Distributions }
447*4f1223e8SApple OSS Distributions return kr;
448*4f1223e8SApple OSS Distributions }
449*4f1223e8SApple OSS Distributions
450*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_region_64(vm_map_t map,vm32_offset_ut * addr32,vm32_size_ut * size32,vm_region_flavor_t flavor,vm_region_info_t info,mach_msg_type_number_t * count,mach_port_t * object_name)451*4f1223e8SApple OSS Distributions vm32_vm_region_64(
452*4f1223e8SApple OSS Distributions vm_map_t map,
453*4f1223e8SApple OSS Distributions vm32_offset_ut *addr32, /* IN/OUT */
454*4f1223e8SApple OSS Distributions vm32_size_ut *size32, /* OUT */
455*4f1223e8SApple OSS Distributions vm_region_flavor_t flavor, /* IN */
456*4f1223e8SApple OSS Distributions vm_region_info_t info, /* OUT */
457*4f1223e8SApple OSS Distributions mach_msg_type_number_t *count, /* IN/OUT */
458*4f1223e8SApple OSS Distributions mach_port_t *object_name) /* OUT */
459*4f1223e8SApple OSS Distributions {
460*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
461*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
462*4f1223e8SApple OSS Distributions kern_return_t kr;
463*4f1223e8SApple OSS Distributions
464*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
465*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(*size32);
466*4f1223e8SApple OSS Distributions
467*4f1223e8SApple OSS Distributions kr = mach_vm_region(map, &addr, &size, flavor, info, count, object_name);
468*4f1223e8SApple OSS Distributions
469*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
470*4f1223e8SApple OSS Distributions *size32 = vm_sanitize_trunc_size_to_32(size);
471*4f1223e8SApple OSS Distributions
472*4f1223e8SApple OSS Distributions return kr;
473*4f1223e8SApple OSS Distributions }
474*4f1223e8SApple OSS Distributions
475*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_region(vm_map_t map,vm32_address_ut * addr32,vm32_size_ut * size32,vm_region_flavor_t flavor,vm_region_info_t info,mach_msg_type_number_t * count,mach_port_t * object_name)476*4f1223e8SApple OSS Distributions vm32_vm_region(
477*4f1223e8SApple OSS Distributions vm_map_t map,
478*4f1223e8SApple OSS Distributions vm32_address_ut *addr32, /* IN/OUT */
479*4f1223e8SApple OSS Distributions vm32_size_ut *size32, /* OUT */
480*4f1223e8SApple OSS Distributions vm_region_flavor_t flavor, /* IN */
481*4f1223e8SApple OSS Distributions vm_region_info_t info, /* OUT */
482*4f1223e8SApple OSS Distributions mach_msg_type_number_t *count, /* IN/OUT */
483*4f1223e8SApple OSS Distributions mach_port_t *object_name) /* OUT */
484*4f1223e8SApple OSS Distributions {
485*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
486*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
487*4f1223e8SApple OSS Distributions kern_return_t kr;
488*4f1223e8SApple OSS Distributions
489*4f1223e8SApple OSS Distributions if (VM_MAP_NULL == map) {
490*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
491*4f1223e8SApple OSS Distributions }
492*4f1223e8SApple OSS Distributions
493*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
494*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(*size32);
495*4f1223e8SApple OSS Distributions
496*4f1223e8SApple OSS Distributions kr = vm_map_region(map, &addr, &size, flavor, info, count, object_name);
497*4f1223e8SApple OSS Distributions
498*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
499*4f1223e8SApple OSS Distributions *size32 = vm_sanitize_trunc_size_to_32(size);
500*4f1223e8SApple OSS Distributions
501*4f1223e8SApple OSS Distributions return vm32_region_get_kern_return(kr, addr, size);
502*4f1223e8SApple OSS Distributions }
503*4f1223e8SApple OSS Distributions
504*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_region_recurse_64(vm_map_t map,vm32_address_ut * addr32,vm32_size_ut * size32,uint32_t * depth,vm_region_recurse_info_64_t info,mach_msg_type_number_t * infoCnt)505*4f1223e8SApple OSS Distributions vm32_vm_region_recurse_64(
506*4f1223e8SApple OSS Distributions vm_map_t map,
507*4f1223e8SApple OSS Distributions vm32_address_ut *addr32,
508*4f1223e8SApple OSS Distributions vm32_size_ut *size32,
509*4f1223e8SApple OSS Distributions uint32_t *depth,
510*4f1223e8SApple OSS Distributions vm_region_recurse_info_64_t info,
511*4f1223e8SApple OSS Distributions mach_msg_type_number_t *infoCnt)
512*4f1223e8SApple OSS Distributions {
513*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
514*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
515*4f1223e8SApple OSS Distributions kern_return_t kr;
516*4f1223e8SApple OSS Distributions
517*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
518*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(*size32);
519*4f1223e8SApple OSS Distributions
520*4f1223e8SApple OSS Distributions kr = mach_vm_region_recurse(map, &addr, &size, depth, info, infoCnt);
521*4f1223e8SApple OSS Distributions
522*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
523*4f1223e8SApple OSS Distributions *size32 = vm_sanitize_trunc_size_to_32(size);
524*4f1223e8SApple OSS Distributions
525*4f1223e8SApple OSS Distributions return kr;
526*4f1223e8SApple OSS Distributions }
527*4f1223e8SApple OSS Distributions
528*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_region_recurse(vm_map_t map,vm32_offset_ut * addr32,vm32_size_ut * size32,natural_t * depth,vm_region_recurse_info_t info32,mach_msg_type_number_t * infoCnt)529*4f1223e8SApple OSS Distributions vm32_vm_region_recurse(
530*4f1223e8SApple OSS Distributions vm_map_t map,
531*4f1223e8SApple OSS Distributions vm32_offset_ut *addr32, /* IN/OUT */
532*4f1223e8SApple OSS Distributions vm32_size_ut *size32, /* OUT */
533*4f1223e8SApple OSS Distributions natural_t *depth, /* IN/OUT */
534*4f1223e8SApple OSS Distributions vm_region_recurse_info_t info32, /* IN/OUT */
535*4f1223e8SApple OSS Distributions mach_msg_type_number_t *infoCnt) /* IN/OUT */
536*4f1223e8SApple OSS Distributions {
537*4f1223e8SApple OSS Distributions vm_region_submap_info_data_64_t info64;
538*4f1223e8SApple OSS Distributions vm_region_submap_info_t info;
539*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
540*4f1223e8SApple OSS Distributions mach_vm_size_ut size;
541*4f1223e8SApple OSS Distributions kern_return_t kr;
542*4f1223e8SApple OSS Distributions
543*4f1223e8SApple OSS Distributions if (VM_MAP_NULL == map || *infoCnt < VM_REGION_SUBMAP_INFO_COUNT) {
544*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
545*4f1223e8SApple OSS Distributions }
546*4f1223e8SApple OSS Distributions
547*4f1223e8SApple OSS Distributions
548*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(*addr32);
549*4f1223e8SApple OSS Distributions size = vm_sanitize_expand_size_to_64(*size32);
550*4f1223e8SApple OSS Distributions info = (vm_region_submap_info_t)info32;
551*4f1223e8SApple OSS Distributions *infoCnt = VM_REGION_SUBMAP_INFO_COUNT_64;
552*4f1223e8SApple OSS Distributions
553*4f1223e8SApple OSS Distributions kr = mach_vm_region_recurse(map, &addr, &size,
554*4f1223e8SApple OSS Distributions depth, (vm_region_recurse_info_t)&info64, infoCnt);
555*4f1223e8SApple OSS Distributions
556*4f1223e8SApple OSS Distributions info->protection = info64.protection;
557*4f1223e8SApple OSS Distributions info->max_protection = info64.max_protection;
558*4f1223e8SApple OSS Distributions info->inheritance = info64.inheritance;
559*4f1223e8SApple OSS Distributions info->offset = (uint32_t)info64.offset; /* trouble-maker */
560*4f1223e8SApple OSS Distributions info->user_tag = info64.user_tag;
561*4f1223e8SApple OSS Distributions info->pages_resident = info64.pages_resident;
562*4f1223e8SApple OSS Distributions info->pages_shared_now_private = info64.pages_shared_now_private;
563*4f1223e8SApple OSS Distributions info->pages_swapped_out = info64.pages_swapped_out;
564*4f1223e8SApple OSS Distributions info->pages_dirtied = info64.pages_dirtied;
565*4f1223e8SApple OSS Distributions info->ref_count = info64.ref_count;
566*4f1223e8SApple OSS Distributions info->shadow_depth = info64.shadow_depth;
567*4f1223e8SApple OSS Distributions info->external_pager = info64.external_pager;
568*4f1223e8SApple OSS Distributions info->share_mode = info64.share_mode;
569*4f1223e8SApple OSS Distributions info->is_submap = info64.is_submap;
570*4f1223e8SApple OSS Distributions info->behavior = info64.behavior;
571*4f1223e8SApple OSS Distributions info->object_id = info64.object_id;
572*4f1223e8SApple OSS Distributions info->user_wired_count = info64.user_wired_count;
573*4f1223e8SApple OSS Distributions
574*4f1223e8SApple OSS Distributions *addr32 = vm_sanitize_trunc_addr_to_32(addr);
575*4f1223e8SApple OSS Distributions *size32 = vm_sanitize_trunc_size_to_32(size);
576*4f1223e8SApple OSS Distributions *infoCnt = VM_REGION_SUBMAP_INFO_COUNT;
577*4f1223e8SApple OSS Distributions
578*4f1223e8SApple OSS Distributions return vm32_region_get_kern_return(kr, addr, size);
579*4f1223e8SApple OSS Distributions }
580*4f1223e8SApple OSS Distributions
581*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_purgable_control(vm_map_t map,vm32_offset_ut addr32,vm_purgable_t control,int * state)582*4f1223e8SApple OSS Distributions vm32_vm_purgable_control(
583*4f1223e8SApple OSS Distributions vm_map_t map,
584*4f1223e8SApple OSS Distributions vm32_offset_ut addr32,
585*4f1223e8SApple OSS Distributions vm_purgable_t control,
586*4f1223e8SApple OSS Distributions int *state)
587*4f1223e8SApple OSS Distributions {
588*4f1223e8SApple OSS Distributions mach_vm_offset_ut addr;
589*4f1223e8SApple OSS Distributions
590*4f1223e8SApple OSS Distributions addr = vm_sanitize_expand_addr_to_64(addr32);
591*4f1223e8SApple OSS Distributions return mach_vm_purgable_control(map, addr, control, state);
592*4f1223e8SApple OSS Distributions }
593*4f1223e8SApple OSS Distributions
594*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_map_page_query(vm_map_t map,vm32_offset_t offset32,int * disposition,int * ref_count)595*4f1223e8SApple OSS Distributions vm32_vm_map_page_query(
596*4f1223e8SApple OSS Distributions vm_map_t map,
597*4f1223e8SApple OSS Distributions vm32_offset_t offset32,
598*4f1223e8SApple OSS Distributions int *disposition,
599*4f1223e8SApple OSS Distributions int *ref_count)
600*4f1223e8SApple OSS Distributions {
601*4f1223e8SApple OSS Distributions vm_offset_ut offset = vm_sanitize_expand_addr_to_64(offset32);
602*4f1223e8SApple OSS Distributions
603*4f1223e8SApple OSS Distributions return mach_vm_page_query(map, offset, disposition, ref_count);
604*4f1223e8SApple OSS Distributions }
605*4f1223e8SApple OSS Distributions
606*4f1223e8SApple OSS Distributions kern_return_t
vm32_mach_make_memory_entry_64(vm_map_t target_map,memory_object_size_ut * size,memory_object_offset_ut offset,vm_prot_ut permission,ipc_port_t * object_handle,ipc_port_t parent_handle)607*4f1223e8SApple OSS Distributions vm32_mach_make_memory_entry_64(
608*4f1223e8SApple OSS Distributions vm_map_t target_map,
609*4f1223e8SApple OSS Distributions memory_object_size_ut *size,
610*4f1223e8SApple OSS Distributions memory_object_offset_ut offset,
611*4f1223e8SApple OSS Distributions vm_prot_ut permission,
612*4f1223e8SApple OSS Distributions ipc_port_t *object_handle,
613*4f1223e8SApple OSS Distributions ipc_port_t parent_handle)
614*4f1223e8SApple OSS Distributions {
615*4f1223e8SApple OSS Distributions // use the existing entrypoint
616*4f1223e8SApple OSS Distributions return _mach_make_memory_entry(target_map, size, offset, permission, object_handle, parent_handle);
617*4f1223e8SApple OSS Distributions }
618*4f1223e8SApple OSS Distributions
619*4f1223e8SApple OSS Distributions kern_return_t
vm32_mach_make_memory_entry(vm_map_t target_map,vm32_size_ut * size,vm32_offset_ut offset,vm_prot_ut permission,ipc_port_t * object_handle,ipc_port_t parent_entry)620*4f1223e8SApple OSS Distributions vm32_mach_make_memory_entry(
621*4f1223e8SApple OSS Distributions vm_map_t target_map,
622*4f1223e8SApple OSS Distributions vm32_size_ut *size,
623*4f1223e8SApple OSS Distributions vm32_offset_ut offset,
624*4f1223e8SApple OSS Distributions vm_prot_ut permission,
625*4f1223e8SApple OSS Distributions ipc_port_t *object_handle,
626*4f1223e8SApple OSS Distributions ipc_port_t parent_entry)
627*4f1223e8SApple OSS Distributions {
628*4f1223e8SApple OSS Distributions memory_object_size_ut mo_size = vm_sanitize_expand_size_to_64(*size);
629*4f1223e8SApple OSS Distributions memory_object_offset_ut mo_offset = vm_sanitize_expand_addr_to_64(offset);
630*4f1223e8SApple OSS Distributions kern_return_t kr;
631*4f1223e8SApple OSS Distributions
632*4f1223e8SApple OSS Distributions kr = _mach_make_memory_entry(target_map, &mo_size,
633*4f1223e8SApple OSS Distributions mo_offset, permission, object_handle, parent_entry);
634*4f1223e8SApple OSS Distributions *size = vm_sanitize_trunc_size_to_32(mo_size);
635*4f1223e8SApple OSS Distributions return kr;
636*4f1223e8SApple OSS Distributions }
637*4f1223e8SApple OSS Distributions
638*4f1223e8SApple OSS Distributions kern_return_t
vm32_task_wire(vm_map_t map,boolean_t must_wire __unused)639*4f1223e8SApple OSS Distributions vm32_task_wire(
640*4f1223e8SApple OSS Distributions vm_map_t map,
641*4f1223e8SApple OSS Distributions boolean_t must_wire __unused)
642*4f1223e8SApple OSS Distributions {
643*4f1223e8SApple OSS Distributions if (map == VM_MAP_NULL) {
644*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
645*4f1223e8SApple OSS Distributions }
646*4f1223e8SApple OSS Distributions
647*4f1223e8SApple OSS Distributions return KERN_NOT_SUPPORTED;
648*4f1223e8SApple OSS Distributions }
649*4f1223e8SApple OSS Distributions
650*4f1223e8SApple OSS Distributions kern_return_t
vm32_vm_map_exec_lockdown(vm_map_t map)651*4f1223e8SApple OSS Distributions vm32_vm_map_exec_lockdown(
652*4f1223e8SApple OSS Distributions vm_map_t map)
653*4f1223e8SApple OSS Distributions {
654*4f1223e8SApple OSS Distributions if (map == VM_MAP_NULL) {
655*4f1223e8SApple OSS Distributions return KERN_INVALID_ARGUMENT;
656*4f1223e8SApple OSS Distributions }
657*4f1223e8SApple OSS Distributions
658*4f1223e8SApple OSS Distributions vm_map_lock(map);
659*4f1223e8SApple OSS Distributions map->map_disallow_new_exec = TRUE;
660*4f1223e8SApple OSS Distributions vm_map_unlock(map);
661*4f1223e8SApple OSS Distributions
662*4f1223e8SApple OSS Distributions return KERN_SUCCESS;
663*4f1223e8SApple OSS Distributions }
664*4f1223e8SApple OSS Distributions
665*4f1223e8SApple OSS Distributions
666*4f1223e8SApple OSS Distributions #endif /* VM32_SUPPORT */
667