Make it possible to use caps in child

This commit is contained in:
Jan Schär 2022-03-24 21:50:08 +01:00
parent c835aa477b
commit d58ae46282

View File

@ -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) {