Cleanup kernel allocations
This commit is contained in:
parent
f4ec73bb62
commit
77725b3d66
@ -67,6 +67,10 @@ get_threads(task_t task, void *slice) {
|
||||
}
|
||||
|
||||
memcpy(slice, (void*)list, count*sizeof(list[0]));
|
||||
|
||||
kret = vm_deallocate(task, (vm_address_t) &list, count * sizeof(list[0]));
|
||||
if (kret != KERN_SUCCESS) return kret;
|
||||
|
||||
return (kern_return_t)0;
|
||||
}
|
||||
|
||||
@ -76,9 +80,12 @@ thread_count(task_t task) {
|
||||
thread_act_array_t list;
|
||||
mach_msg_type_number_t count;
|
||||
|
||||
// TODO(dp) vm_deallocate list
|
||||
kret = task_threads(task, &list, &count);
|
||||
if (kret != KERN_SUCCESS) return -1;
|
||||
|
||||
kret = vm_deallocate(task, (vm_address_t) &list, count * sizeof(list[0]));
|
||||
if (kret != KERN_SUCCESS) return -1;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -114,6 +121,8 @@ catch_mach_exception_raise(
|
||||
mach_exception_data_t code,
|
||||
mach_msg_type_number_t codeCnt)
|
||||
{
|
||||
_global_thread = (thread_act_t)thread;
|
||||
thread_suspend(thread);
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -29,8 +29,11 @@ read_memory(mach_port_name_t task, mach_vm_address_t addr, void *d, mach_msg_typ
|
||||
|
||||
kret = mach_vm_read((vm_map_t)task, addr, len, &data, &count);
|
||||
if (kret != KERN_SUCCESS) return -1;
|
||||
// TODO(dp) possible memory leak - vm_deallocate data
|
||||
memcpy(d, (void *)data, len);
|
||||
|
||||
kret = vm_deallocate(task, data, len);
|
||||
if (kret != KERN_SUCCESS) return -1;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -44,6 +47,7 @@ get_registers(mach_port_name_t task) {
|
||||
kret = thread_get_state(task, x86_THREAD_STATE64, (thread_state_t)&state, &stateCount);
|
||||
if (kret != KERN_SUCCESS) printf("SOMETHING WENT WRONG-------------- %d\n", kret);
|
||||
if (kret == KERN_INVALID_ARGUMENT) puts("INAVLID ARGUMENT");
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user