diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-05-29 14:44:39 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-05-29 15:32:43 +0200 |
commit | 99a43d36c83d318f24edd8c6d80f060686a6c398 (patch) | |
tree | c4ab9a60249e92a8ef8d2b61a5cddef9e9e8d44b | |
parent | b2b8bf37934087f8fb2a246316ecf9e91955ec57 (diff) |
kern: fix argument handling
Previously, the processor argument was not checked. If called with a
non-processor argument (like a task), `processor' is set to NULL,
triggering a page fault. Likewise for the other functions.
* kern/processor.c (processor_get_assignment): Fix argument handling.
* kern/task.c (task_get_assignment): Likewise.
* kern/thread.c (thread_get_assignment): Likewise.
-rw-r--r-- | kern/processor.c | 2 | ||||
-rw-r--r-- | kern/task.c | 3 | ||||
-rw-r--r-- | kern/thread.c | 3 |
3 files changed, 8 insertions, 0 deletions
diff --git a/kern/processor.c b/kern/processor.c index 865c324..48e9273 100644 --- a/kern/processor.c +++ b/kern/processor.c @@ -657,6 +657,8 @@ processor_get_assignment( processor_set_t *pset) { int state; + if (processor == PROCESSOR_NULL) + return KERN_INVALID_ARGUMENT; state = processor->state; if (state == PROCESSOR_SHUTDOWN || state == PROCESSOR_OFF_LINE) diff --git a/kern/task.c b/kern/task.c index dcd5371..b384347 100644 --- a/kern/task.c +++ b/kern/task.c @@ -1063,6 +1063,9 @@ kern_return_t task_get_assignment( task_t task, processor_set_t *pset) { + if (task == TASK_NULL) + return KERN_INVALID_ARGUMENT; + if (!task->active) return KERN_FAILURE; diff --git a/kern/thread.c b/kern/thread.c index f52c95b..8b1e9f5 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -1974,6 +1974,9 @@ kern_return_t thread_get_assignment( thread_t thread, processor_set_t *pset) { + if (thread == THREAD_NULL) + return KERN_INVALID_ARGUMENT; + *pset = thread->processor_set; pset_reference(*pset); return KERN_SUCCESS; |