this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Support mach_vm_(de)allocate() in a remote process

+36 -7
+36 -7
src/kernel/emulation/linux/mach/mach_traps.c
··· 169 169 mach_vm_size_t size, 170 170 int flags) 171 171 { 172 - return _kernelrpc_mach_vm_map_trap_impl(target, addr, 173 - size, 0, flags, VM_PROT_READ | VM_PROT_WRITE); 172 + if (target != 0 && target != mach_task_self()) 173 + { 174 + struct mach_vm_allocate_args args = { 175 + .target = target, 176 + .address = (uint64_t) *addr, 177 + .size = size, 178 + .flags = flags 179 + }; 180 + 181 + int rv = lkm_call(NR__kernelrpc_mach_vm_allocate_trap, &args); 182 + 183 + if (rv == KERN_SUCCESS) 184 + *addr = args.address; 185 + 186 + return rv; 187 + } 188 + else 189 + { 190 + return _kernelrpc_mach_vm_map_trap_impl(target, addr, 191 + size, 0, flags, VM_PROT_READ | VM_PROT_WRITE); 192 + } 174 193 } 175 194 176 195 kern_return_t _kernelrpc_mach_vm_deallocate_trap_impl( ··· 182 201 int ret; 183 202 184 203 if (target != 0 && target != mach_task_self()) 185 - return KERN_FAILURE; 204 + { 205 + struct mach_vm_deallocate_args args = { 206 + .target = target, 207 + .address = (uint64_t) address, 208 + .size = size, 209 + }; 186 210 187 - ret = munmap(address, size); 211 + return lkm_call(NR__kernelrpc_mach_vm_deallocate_trap, &args); 212 + } 213 + else 214 + { 215 + ret = munmap(address, size); 188 216 189 - if (ret == -1) 190 - return KERN_FAILURE; 217 + if (ret == -1) 218 + return KERN_FAILURE; 191 219 192 - return KERN_SUCCESS; 220 + return KERN_SUCCESS; 221 + } 193 222 } 194 223 195 224 kern_return_t _kernelrpc_mach_vm_protect_trap_impl(