Cleanup kernel allocations

This commit is contained in:
Derek Parker 2015-02-28 10:35:44 -06:00
parent f4ec73bb62
commit 77725b3d66
2 changed files with 15 additions and 2 deletions

@ -67,6 +67,10 @@ get_threads(task_t task, void *slice) {
} }
memcpy(slice, (void*)list, count*sizeof(list[0])); 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; return (kern_return_t)0;
} }
@ -76,9 +80,12 @@ thread_count(task_t task) {
thread_act_array_t list; thread_act_array_t list;
mach_msg_type_number_t count; mach_msg_type_number_t count;
// TODO(dp) vm_deallocate list
kret = task_threads(task, &list, &count); kret = task_threads(task, &list, &count);
if (kret != KERN_SUCCESS) return -1; 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; return count;
} }
@ -114,6 +121,8 @@ catch_mach_exception_raise(
mach_exception_data_t code, mach_exception_data_t code,
mach_msg_type_number_t codeCnt) mach_msg_type_number_t codeCnt)
{ {
_global_thread = (thread_act_t)thread;
thread_suspend(thread);
return KERN_SUCCESS; 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); kret = mach_vm_read((vm_map_t)task, addr, len, &data, &count);
if (kret != KERN_SUCCESS) return -1; if (kret != KERN_SUCCESS) return -1;
// TODO(dp) possible memory leak - vm_deallocate data
memcpy(d, (void *)data, len); memcpy(d, (void *)data, len);
kret = vm_deallocate(task, data, len);
if (kret != KERN_SUCCESS) return -1;
return count; 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); 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_SUCCESS) printf("SOMETHING WENT WRONG-------------- %d\n", kret);
if (kret == KERN_INVALID_ARGUMENT) puts("INAVLID ARGUMENT"); if (kret == KERN_INVALID_ARGUMENT) puts("INAVLID ARGUMENT");
return state; return state;
} }