diff --git a/lib/spawn/spawn.c b/lib/spawn/spawn.c index afbbee3..c7b9722 100644 --- a/lib/spawn/spawn.c +++ b/lib/spawn/spawn.c @@ -123,7 +123,7 @@ static size_t spawn_serialice_vspace_pt_size(struct pt_t *pt) { size_t sum = 0; sum += sizeof(struct pt_t); - + if(pt->children != NULL) { // children array sum += PT_CHILD_ARRAY_SIZE; @@ -160,6 +160,7 @@ static errval_t spawn_serialize_pt(struct spawninfo *si, struct pt_t *pt, void * if (err_is_fail(err)) { return err_push(err, LIB_ERR_CAP_COPY_FAIL); } + pt_child->cap_pt.cnode = cnode_page; } if(!capref_is_null(pt->cap_mapping)) { @@ -170,6 +171,7 @@ static errval_t spawn_serialize_pt(struct spawninfo *si, struct pt_t *pt, void * if (err_is_fail(err)) { return err_push(err, LIB_ERR_CAP_COPY_FAIL); } + pt_child->cap_mapping.cnode = cnode_page; } if (pt->children == NULL) { @@ -213,7 +215,7 @@ static errval_t spawn_serialize_vspace(struct spawninfo *si, struct paging_state size_t pointer_space = 2 * sizeof(void *); size_t total_space = pointer_space + pt_space + vaddr_space; - size_t reserve_space = + size_t reserve_space = // additional structs for the vaddr allocation that is required 2 * sizeof(struct pt_vaddr_reg_t) + // space for potential l1,l2,l3 page tables @@ -380,6 +382,9 @@ errval_t spawn_load_argv(int argc, char *argv[], struct spawninfo *si, if (err_is_fail(err)) return err; // afeer: populate some capabilities + err = cap_copy(si->cspace_cap_rootcn, si->cspace_l1_cnode_cap); + if (err_is_fail(err)) return err_push(err, LIB_ERR_CAP_COPY_FAIL); + err = slot_alloc(&si->dispatcher); if (err_is_fail(err)) return err_push(err, LIB_ERR_SLOT_ALLOC); @@ -516,7 +521,7 @@ errval_t spawn_load_argv(int argc, char *argv[], struct spawninfo *si, // afeer: put the arguments into the argspage struct spawn_domain_params * domain_params = (struct spawn_domain_params *) arguments_page_in_self; - + err = spawn_serialize_vspace(si, &child_paging_state, domain_params); if (err_is_fail(err)) { return err_push(err, SPAWN_ERR_SERIALISE_VSPACE); @@ -527,7 +532,7 @@ errval_t spawn_load_argv(int argc, char *argv[], struct spawninfo *si, // domain_params->tls_init_len = 0; // domain_params->tls_total_len = 0; // domain_params->pagesize = BASE_PAGE_SIZE; - + domain_params->argc = argc; size_t offset = sizeof(struct spawn_domain_params); for (int i = 0; i < argc; ++i) {