token_unseal: commentary and symbolic names
diff --git a/sdk/core/allocator/token.h b/sdk/core/allocator/token.h index e9ce8f7..42c7343 100644 --- a/sdk/core/allocator/token.h +++ b/sdk/core/allocator/token.h
@@ -92,3 +92,5 @@ EXPORT_ASSEMBLY_OFFSET(TokenSObj, type, 0); EXPORT_ASSEMBLY_OFFSET(TokenSObj, data, 8); +EXPORT_ASSEMBLY_NAME(CheriSealTypeAllocator, 11); +EXPORT_ASSEMBLY_NAME(CheriSealTypeStaticToken, 12);
diff --git a/sdk/core/token_library/token_unseal.S b/sdk/core/token_library/token_unseal.S index 39cfc2e..1dccc04 100644 --- a/sdk/core/token_library/token_unseal.S +++ b/sdk/core/token_library/token_unseal.S
@@ -12,19 +12,16 @@ .size __sealingkey, 8 -/* - * An in-assembler implementation of - * - * [[cheri::interrupt_state(disabled)]] void *__cheri_libcall - * token_obj_unseal(struct SKeyStruct *, struct SObjStruct *); - * - * The name has been manually mangled as per the C++ rules. - */ - .section .text,"ax",@progbits .p2align 1 +/** + * The core of unsealing: + * + * void *token_unseal_internal(struct SKeyStruct *, struct SObjStruct *, int); + */ + .Ltoken_unseal_internal: /* * Register allocation: @@ -100,29 +97,53 @@ /* And that's an unwrap. */ cret +.Lexit_failure: + /* Failure; clobber potential sensitive state in ca0 and return null */ + cmove ca0, cnull + cret + +/** + * An in-assembler implementation of + * + * [[cheri::interrupt_state(disabled)]] void *__cheri_libcall + * token_obj_unseal(struct SKeyStruct *, struct SObjStruct *); + * + * The name has been manually mangled as per the C++ rules. + */ .hidden _Z16token_obj_unsealP10SKeyStructP10SObjStruct .globl _Z16token_obj_unsealP10SKeyStructP10SObjStruct _Z16token_obj_unsealP10SKeyStructP10SObjStruct: cgettype a2, ca1 j .Ltoken_unseal_internal +/** + * An in-assembler implementation of + * + * [[cheri::interrupt_state(disabled)]] void *__cheri_libcall + * token_obj_unseal_static(struct SKeyStruct *, struct SObjStruct *); + * + * The name has been manually mangled as per the C++ rules. + */ .hidden _Z23token_obj_unseal_staticP10SKeyStructP10SObjStruct .globl _Z23token_obj_unseal_staticP10SKeyStructP10SObjStruct _Z23token_obj_unseal_staticP10SKeyStructP10SObjStruct: - li a2, 12 + li a2, CheriSealTypeStaticToken j .Ltoken_unseal_internal +/** + * An in-assembler implementation of + * + * [[cheri::interrupt_state(disabled)]] void *__cheri_libcall + * token_obj_unseal_dynamic(struct SKeyStruct *, struct SObjStruct *); + * + * The name has been manually mangled as per the C++ rules. + */ .hidden _Z16token_obj_unsealP10SKeyStructP10SObjStruct .globl _Z16token_obj_unsealP10SKeyStructP10SObjStruct _Z24token_obj_unseal_dynamicP10SKeyStructP10SObjStruct: - li a2, 11 + li a2, CheriSealTypeAllocator j .Ltoken_unseal_internal -.Lexit_failure: - /* Failure; clobber potential sensitive state in ca0 and return null */ - cmove ca0, cnull - cret - /* TODO: Eventually this goes away, when the assembler can generate it for us */ CHERIOT_EXPORT_LIBCALL \ _Z16token_obj_unsealP10SKeyStructP10SObjStruct, \