Changeset cfffb290 in mainline


Ignore:
Timestamp:
2006-08-05T16:05:25Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e2882a7
Parents:
b006a2c8
Message:

finish security context isolation

Location:
kernel/generic
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/arch.h

    rb006a2c8 rcfffb290  
    4444#include <arch/asm.h>
    4545
     46#define DEFAULT_CONTEXT         0
     47
    4648#define CPU                     THE->cpu
    4749#define THREAD                  THE->thread
    4850#define TASK                    THE->task
    4951#define AS                      THE->as
     52#define CONTEXT         (THE->task ? THE->task->context : DEFAULT_CONTEXT)
    5053#define PREEMPTION_DISABLED     THE->preemption_disabled
     54
     55#define context_check(ctx1, ctx2)       ((ctx1) == (ctx2))
    5156
    5257/**
     
    6166        cpu_t *cpu;                     /**< Executing cpu. */
    6267        as_t *as;                       /**< Current address space. */
    63         context_id_t context;   /**< Current security context. */
    6468};
    6569
    66 #define THE             ((the_t *)(get_stack_base()))   
     70#define THE             ((the_t *)(get_stack_base()))
    6771
    6872extern void the_initialize(the_t *the);
  • kernel/generic/include/proc/thread.h

    rb006a2c8 rcfffb290  
    147147        int priority;                           /**< Thread's priority. Implemented as index to CPU->rq */
    148148        uint32_t tid;                           /**< Thread ID. */
    149         context_id_t context;           /**< Thread security context */
    150149       
    151150        thread_arch_t arch;                     /**< Architecture-specific data. */
  • kernel/generic/src/ddi/ddi.c

    rb006a2c8 rcfffb290  
    130130        t = task_find_by_id(id);
    131131       
    132         if (!t) {
     132        if ((!t) || (!context_check(CONTEXT, t->context))) {
    133133                /*
    134                  * There is no task with the specified ID.
     134                 * There is no task with the specified ID
     135                 * or the task belongs to a different security
     136                 * context.
    135137                 */
    136138                spinlock_unlock(&tasks_lock);
  • kernel/generic/src/proc/task.c

    rb006a2c8 rcfffb290  
    116116        ta->main_thread = NULL;
    117117        ta->refcount = 0;
    118         ta->context = THE->context;
     118        ta->context = CONTEXT;
    119119
    120120        ta->capabilities = 0;
     
    122122       
    123123        ipc_answerbox_init(&ta->answerbox);
    124         for (i=0; i < IPC_MAX_PHONES;i++)
     124        for (i = 0; i < IPC_MAX_PHONES; i++)
    125125                ipc_phone_init(&ta->phones[i]);
    126         if (ipc_phone_0)
     126        if ((ipc_phone_0) && (context_check(ipc_phone_0->task->context, ta->context)))
    127127                ipc_phone_connect(&ta->phones[0], ipc_phone_0);
    128128        atomic_set(&ta->active_calls, 0);
  • kernel/generic/src/proc/the.c

    rb006a2c8 rcfffb290  
    5959        the->task = NULL;
    6060        the->as = NULL;
    61         the->context = 0;
    6261}
    6362
  • kernel/generic/src/proc/thread.c

    rb006a2c8 rcfffb290  
    319319        memcpy(t->name, name, THREAD_NAME_BUFLEN);
    320320       
    321         t->context = THE->context;
    322321        t->thread_code = func;
    323322        t->thread_arg = arg;
     
    535534               
    536535                        t = (thread_t *) node->value[i];
    537                         printf("%s: address=%#zx, tid=%zd, context=%ld, state=%s, task=%#zx, code=%#zx, stack=%#zx, cpu=",
    538                                 t->name, t, t->tid, t->context, thread_states[t->state], t->task, t->thread_code, t->kstack);
     536                        printf("%s: address=%#zx, tid=%zd, state=%s, task=%#zx, context=%ld, code=%#zx, stack=%#zx, cpu=",
     537                                t->name, t, t->tid, thread_states[t->state], t->task, t->task->context, t->thread_code, t->kstack);
    539538                        if (t->cpu)
    540539                                printf("cpu%zd", t->cpu->id);
  • kernel/generic/src/security/cap.c

    rb006a2c8 rcfffb290  
    112112        spinlock_lock(&tasks_lock);
    113113        t = task_find_by_id((task_id_t) taskid_arg.value);
    114         if (!t) {
     114        if ((!t) || (!context_check(CONTEXT, t->context))) {
    115115                spinlock_unlock(&tasks_lock);
    116116                interrupts_restore(ipl);
     
    123123       
    124124        spinlock_unlock(&tasks_lock);
    125        
    126 
    127        
    128125        interrupts_restore(ipl);       
    129126        return 0;
     
    154151        spinlock_lock(&tasks_lock);     
    155152        t = task_find_by_id((task_id_t) taskid_arg.value);
    156         if (!t) {
     153        if ((!t) || (!context_check(CONTEXT, t->context))) {
    157154                spinlock_unlock(&tasks_lock);
    158155                interrupts_restore(ipl);
Note: See TracChangeset for help on using the changeset viewer.