diff options
author | Justus Winter <teythoon@avior.uberspace.de> | 2017-10-26 17:38:30 +0200 |
---|---|---|
committer | Justus Winter <teythoon@avior.uberspace.de> | 2017-10-26 18:25:12 +0200 |
commit | 10ebf9565f69760e46a8f271e22c5367d54e10ff (patch) | |
tree | 4c60dcf6e2056d50f2da1ca2cc889ff41f7138c3 /kern/task.c | |
parent | d7d4740699431889f44fc7ce16f083eaa31f907e (diff) | |
download | gnumach-10ebf9565f69760e46a8f271e22c5367d54e10ff.tar.gz gnumach-10ebf9565f69760e46a8f271e22c5367d54e10ff.tar.bz2 gnumach-10ebf9565f69760e46a8f271e22c5367d54e10ff.zip |
kern: Fix crash.
Check receiver in task_create. Fixes a crash when sending that
message to a non-task port.
* kern/bootstrap.c (boot_script_task_create): Use the new function.
* kern/task.c (task_create): Rename to task_create_internal, create a
new function in its place that checks the receiver first.
* kern/task.h (task_create_internal): New prototype.
Diffstat (limited to 'kern/task.c')
-rw-r--r-- | kern/task.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kern/task.c b/kern/task.c index 1874af69..681ce872 100644 --- a/kern/task.c +++ b/kern/task.c @@ -73,16 +73,42 @@ void task_init(void) * Task_create must assign to kernel_task as a side effect, * for other initialization. (:-() */ - (void) task_create(TASK_NULL, FALSE, &kernel_task); + (void) task_create_kernel(TASK_NULL, FALSE, &kernel_task); (void) task_set_name(kernel_task, "gnumach"); vm_map_set_name(kernel_map, kernel_task->name); } +int +task_ledger_acquire (task_t task, enum ledger_kind kind) +{ + return ledger_acquire (task->ledgers, kind); +} + +void +task_ledger_release (task_t task, enum ledger_kind kind) +{ + ledger_release (task->ledgers, kind); +} + + kern_return_t task_create( task_t parent_task, boolean_t inherit_memory, task_t *child_task) /* OUT */ { + if (parent_task == TASK_NULL) + return KERN_INVALID_TASK; + + return task_create_kernel (parent_task, inherit_memory, + child_task); +} + +kern_return_t +task_create_kernel( + task_t parent_task, + boolean_t inherit_memory, + task_t *child_task) /* OUT */ +{ task_t new_task; processor_set_t pset; #if FAST_TAS |