/* * Actually free a cheri_fd. This can only be done if there are no * outstanding references in any sandboxes (etc). */ void cheri_fd_destroy(struct cheri_object co) { __capability struct cheri_fd *cfp; cfp = cheri_unseal(co.co_datacap, cheri_fd_type); CHERI_SYSTEM_OBJECT_FINI(cfp); free((void *)cfp); }
void sandbox_object_destroy(struct sandbox_object *sbop) { struct sandbox_class *sbcp; sbcp = sbop->sbo_sandbox_classp; SANDBOX_CLASS_FREE(sbcp->sbc_sandbox_class_statp); if (sbop->sbo_sandbox_object_statp != NULL) (void)sandbox_stat_object_deregister( sbop->sbo_sandbox_object_statp); sandbox_object_unload(sbop); /* Unmap memory. */ CHERI_SYSTEM_OBJECT_FINI(sbop); (void)munmap(sbop->sbo_stackmem, sbop->sbo_stacklen); bzero(sbop, sizeof(*sbop)); /* Clears tags. */ free(sbop); }