Beispiel #1
0
static void
__sandbox_stat_fini(stat_t * pstat)
{
    PROC_BEGIN("__sandbox_stat_fini(%p)", pstat);
    assert(pstat);
    PROC_END("__sandbox_stat_fini()");
}
Beispiel #2
0
static void
__sandbox_stat_init(stat_t * pstat)
{
    PROC_BEGIN("__sandbox_stat_init(%p)", pstat);
    assert(pstat);
    memset(pstat, 0, sizeof(stat_t));
    PROC_END("__sandbox_stat_init()");
}
void 
flush_cache(void)
{
    PROC_BEGIN("flush_cache()");
    unsigned int i;
    unsigned int sum = 0;
    for (i = 0; i < CACHE_SIZE / sizeof(int); i++) cache[i] = 3;
    for (i = 0; i < CACHE_SIZE / sizeof(int); i++) sum += cache[i];
    sink = sum;
    PROC_END("flush_cache()");
}
Beispiel #4
0
void 
cache_flush(void)
{
    PROC_BEGIN();
    unsigned int i;
    unsigned int sum = 0;
    for (i = 0; i < CACHE_SIZE / sizeof(int); i++) cache[i] = 3;
    for (i = 0; i < CACHE_SIZE / sizeof(int); i++) sum += cache[i];
    cache_sink = sum;
    PROC_END();
}
Beispiel #5
0
static void
__sandbox_task_fini(task_t * ptask)
{
    PROC_BEGIN("__sandbox_task_fini(%p)", ptask);

    assert(ptask);

    /* TODO */

    PROC_END("__sandbox_task_fini()");
}
Beispiel #6
0
static void
__sandbox_default_policy(const policy_t * ppolicy, const event_t * pevent,
                         action_t * paction)
{
    PROC_BEGIN("__sandbox_default_policy(%p,%p,%p)", ppolicy, pevent, paction);

    assert(pevent && paction);

    switch (pevent->type)
    {
    case S_EVENT_SYSCALL:
    case S_EVENT_SYSRET:
        *paction = (action_t){S_ACTION_CONT};
        break;
    case S_EVENT_EXIT:
        switch (pevent->data._EXIT.code)
        {
        case EXIT_SUCCESS:
            *paction = (action_t){S_ACTION_FINI, {{S_RESULT_OK}}};
            break;
        default:
            *paction = (action_t){S_ACTION_FINI, {{S_RESULT_AT}}};
            break;
        }
        break;
    case S_EVENT_ERROR:
        *paction = (action_t){S_ACTION_KILL, {{S_RESULT_IE}}};
        break;
    case S_EVENT_SIGNAL:
        *paction = (action_t){S_ACTION_KILL, {{S_RESULT_RT}}};
        break;
    case S_EVENT_QUOTA:
        switch (pevent->data._QUOTA.type)
        {
        case S_QUOTA_WALLCLOCK:
        case S_QUOTA_CPU:
            *paction = (action_t){S_ACTION_KILL, {{S_RESULT_TL}}};
            break;
        case S_QUOTA_MEMORY:
            *paction = (action_t){S_ACTION_KILL, {{S_RESULT_ML}}};
            break;
        case S_QUOTA_DISK:
            *paction = (action_t){S_ACTION_KILL, {{S_RESULT_OL}}};
            break;
        }
        break;
    default:
        *paction = (action_t){S_ACTION_KILL, {{S_RESULT_IE}}};
        break;
    }

    PROC_END("__sandbox_default_policy()");
}
Beispiel #7
0
static void
__sandbox_ctrl_fini(ctrl_t * pctrl)
{
    PROC_BEGIN("__sandbox_ctrl_fini(%p)", pctrl);
    assert(pctrl);
    P(&pctrl->mutex);
    pctrl->idle = true;
    pthread_cond_broadcast(&pctrl->sched);
    V(&pctrl->mutex);
    P(&pctrl->mutex);
    pctrl->tracer = pctrl->monitor = NULL;
    pthread_cond_destroy(&pctrl->sched);
    V(&pctrl->mutex);
    pthread_mutex_destroy(&pctrl->mutex);
    PROC_END("__sandbox_ctrl_fini()");
}
Beispiel #8
0
static void
__sandbox_ctrl_init(ctrl_t * pctrl, thread_func_t tft, thread_func_t tfm)
{
    PROC_BEGIN("__sandbox_ctrl_init(%p,%p,%p)", pctrl, tft, tfm);
    assert(pctrl);
    memset(pctrl, 0, sizeof(ctrl_t));
    pthread_mutex_init(&pctrl->mutex, NULL);
    P(&pctrl->mutex);
    pthread_cond_init(&pctrl->sched, NULL);
    pctrl->policy.entry = (void *)__sandbox_default_policy;
    pctrl->policy.data = 0L;
    pctrl->tracer = tft;
    pctrl->monitor = tfm;
    V(&pctrl->mutex);
    P(&pctrl->mutex);
    pctrl->idle = true;
    pthread_cond_broadcast(&pctrl->sched);
    V(&pctrl->mutex);
    PROC_END("__sandbox_ctrl_init()");
}
Beispiel #9
0
static void
__sandbox_task_init(task_t * ptask, const char * argv[])
{
    PROC_BEGIN("__sandbox_task_init(%p)", ptask);

    assert(ptask);              /* argv could be NULL */

    memset(ptask, 0, sizeof(task_t));

    int argc = 0;
    size_t offset = 0;
    if (argv != NULL)
    {
        while (argv[argc] != NULL)
        {
            size_t delta  = strlen(argv[argc]) + 1;
            if (offset + delta >= sizeof(ptask->comm.buff))
            {
                break;
            }
            strcpy(ptask->comm.buff + offset, argv[argc]);
            ptask->comm.args[argc++] = offset;
            offset += delta;
        }
    }
    ptask->comm.buff[offset] = '\0';
    ptask->comm.args[argc] = -1;

    strcpy(ptask->jail, "/");
    ptask->uid = getuid();
    ptask->gid = getgid();
    ptask->ifd = STDIN_FILENO;
    ptask->ofd = STDOUT_FILENO;
    ptask->efd = STDERR_FILENO;
    ptask->quota[S_QUOTA_WALLCLOCK] = RES_INFINITY;
    ptask->quota[S_QUOTA_CPU] = RES_INFINITY;
    ptask->quota[S_QUOTA_MEMORY] = RES_INFINITY;
    ptask->quota[S_QUOTA_DISK] = RES_INFINITY;
    PROC_END("__sandbox_task_init()");
}