UNPKG

@metamask/ocap-kernel

Version:
1 lines 16.5 kB
{"version":3,"file":"VatSyscall.mjs","sourceRoot":"","sources":["../src/VatSyscall.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n SwingSetCapData,\n VatOneResolution,\n VatSyscallObject,\n VatSyscallResult,\n} from '@agoric/swingset-liveslots';\nimport { Logger } from '@metamask/logger';\n\nimport type { KernelQueue } from './KernelQueue.ts';\nimport { makeError } from './services/kernel-marshal.ts';\nimport type { KernelStore } from './store/index.ts';\nimport { parseRef } from './store/utils/parse-ref.ts';\nimport { coerceMessage } from './types.ts';\nimport type { Message, VatId, KRef } from './types.ts';\n\ntype VatSyscallProps = {\n vatId: VatId;\n kernelQueue: KernelQueue;\n kernelStore: KernelStore;\n logger?: Logger;\n};\n\n/**\n * A VatSyscall is a class that handles syscalls from a vat.\n *\n * This class is responsible for handling syscalls from a vat, including\n * sending messages, resolving promises, and dropping imports.\n */\nexport class VatSyscall {\n /** The ID of the vat */\n readonly vatId: VatId;\n\n /** The kernel's run queue */\n readonly #kernelQueue: KernelQueue;\n\n /** The kernel's store */\n readonly #kernelStore: KernelStore;\n\n /** Logger for outputting messages (such as errors) to the console */\n readonly #logger: Logger | undefined;\n\n /** The illegal syscall that was received */\n illegalSyscall: { vatId: VatId; info: SwingSetCapData } | undefined;\n\n /** The error when delivery failed */\n deliveryError: string | undefined;\n\n /** The termination request that was received from the vat with syscall.exit() */\n vatRequestedTermination:\n | { reject: boolean; info: SwingSetCapData }\n | undefined;\n\n /**\n * Construct a new VatSyscall instance.\n *\n * @param props - The properties for the VatSyscall.\n * @param props.vatId - The ID of the vat.\n * @param props.kernelQueue - The kernel's run queue.\n * @param props.kernelStore - The kernel's store.\n * @param props.logger - The logger for the VatSyscall.\n */\n constructor({ vatId, kernelQueue, kernelStore, logger }: VatSyscallProps) {\n this.vatId = vatId;\n this.#kernelQueue = kernelQueue;\n this.#kernelStore = kernelStore;\n this.#logger = logger;\n }\n\n /**\n * Handle a 'send' syscall from the vat.\n *\n * @param target - The target of the message send.\n * @param message - The message that was sent.\n */\n #handleSyscallSend(target: KRef, message: Message): void {\n this.#kernelQueue.enqueueSend(target, message);\n }\n\n /**\n * Handle a 'resolve' syscall from the vat.\n *\n * @param resolutions - One or more promise resolutions.\n */\n #handleSyscallResolve(resolutions: VatOneResolution[]): void {\n this.#kernelQueue.resolvePromises(this.vatId, resolutions);\n }\n\n /**\n * Handle a 'subscribe' syscall from the vat.\n *\n * @param kpid - The KRef of the promise being subscribed to.\n */\n #handleSyscallSubscribe(kpid: KRef): void {\n const kp = this.#kernelStore.getKernelPromise(kpid);\n if (kp.state === 'unresolved') {\n this.#kernelStore.addPromiseSubscriber(this.vatId, kpid);\n } else {\n this.#kernelQueue.enqueueNotify(this.vatId, kpid);\n }\n }\n\n /**\n * Handle a 'dropImports' syscall from the vat.\n *\n * @param krefs - The KRefs of the imports to be dropped.\n */\n #handleSyscallDropImports(krefs: KRef[]): void {\n for (const kref of krefs) {\n const { direction, isPromise } = parseRef(kref);\n // We validate it's an import - meaning this vat received this object from somewhere else\n if (direction === 'export' || isPromise) {\n throw Error(\n `vat ${this.vatId} issued invalid syscall dropImports for ${kref}`,\n );\n }\n this.#kernelStore.clearReachableFlag(this.vatId, kref);\n }\n }\n\n /**\n * Handle a 'retireImports' syscall from the vat.\n *\n * @param krefs - The KRefs of the imports to be retired.\n */\n #handleSyscallRetireImports(krefs: KRef[]): void {\n for (const kref of krefs) {\n const { direction, isPromise } = parseRef(kref);\n // We validate it's an import - meaning this vat received this object from somewhere else\n if (direction === 'export' || isPromise) {\n throw Error(\n `vat ${this.vatId} issued invalid syscall retireImports for ${kref}`,\n );\n }\n if (this.#kernelStore.getReachableFlag(this.vatId, kref)) {\n throw Error(`syscall.retireImports but ${kref} is still reachable`);\n }\n // deleting the clist entry will decrement the recognizable count, but\n // not the reachable count (because it was unreachable, as we asserted)\n this.#kernelStore.forgetKref(this.vatId, kref);\n }\n }\n\n /**\n * Handle retiring or abandoning exports syscall from the vat.\n *\n * @param krefs - The KRefs of the exports to be retired/abandoned.\n * @param checkReachable - If true, verify the object is not reachable (retire). If false, ignore reachability (abandon).\n */\n #handleSyscallExportCleanup(krefs: KRef[], checkReachable: boolean): void {\n const action = checkReachable ? 'retire' : 'abandon';\n for (const kref of krefs) {\n const { direction, isPromise } = parseRef(kref);\n // We validate it's an export - meaning this vat created/owns this object\n if (direction === 'import' || isPromise) {\n throw Error(\n `vat ${this.vatId} issued invalid syscall ${action}Exports for ${kref}`,\n );\n }\n if (checkReachable) {\n if (this.#kernelStore.getReachableFlag(this.vatId, kref)) {\n throw Error(\n `syscall.${action}Exports but ${kref} is still reachable`,\n );\n }\n }\n this.#kernelStore.forgetKref(this.vatId, kref);\n this.#logger?.debug(`${action}Exports: deleted object ${kref}`);\n }\n }\n\n /**\n * Handle a syscall from the vat.\n *\n * @param vso - The syscall that was received.\n * @returns The result of the syscall.\n */\n handleSyscall(vso: VatSyscallObject): VatSyscallResult {\n try {\n this.illegalSyscall = undefined;\n this.vatRequestedTermination = undefined;\n\n // This is a safety check - this case should never happen\n if (!this.#kernelStore.isVatActive(this.vatId)) {\n this.#recordVatFatalSyscall('vat not found');\n return harden(['error', 'vat not found']);\n }\n\n const kso: VatSyscallObject = this.#kernelStore.translateSyscallVtoK(\n this.vatId,\n vso,\n );\n const [op] = kso;\n const { vatId } = this;\n switch (op) {\n case 'send': {\n // [KRef, Message];\n const [, target, message] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall send ${target}<-${JSON.stringify(message)}`,\n );\n this.#handleSyscallSend(target, coerceMessage(message));\n break;\n }\n case 'subscribe': {\n // [KRef];\n const [, promise] = kso;\n this.#logger?.log(`@@@@ ${vatId} syscall subscribe ${promise}`);\n this.#handleSyscallSubscribe(promise);\n break;\n }\n case 'resolve': {\n // [VatOneResolution[]];\n const [, resolutions] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall resolve ${JSON.stringify(resolutions)}`,\n );\n this.#handleSyscallResolve(resolutions as VatOneResolution[]);\n break;\n }\n case 'exit': {\n // [boolean, SwingSetCapData];\n const [, isFailure, info] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall exit fail=${isFailure} ${JSON.stringify(info)}`,\n );\n this.vatRequestedTermination = { reject: isFailure, info };\n break;\n }\n case 'dropImports': {\n // [KRef[]];\n const [, refs] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall dropImports ${JSON.stringify(refs)}`,\n );\n this.#handleSyscallDropImports(refs);\n break;\n }\n case 'retireImports': {\n // [KRef[]];\n const [, refs] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall retireImports ${JSON.stringify(refs)}`,\n );\n this.#handleSyscallRetireImports(refs);\n break;\n }\n case 'retireExports': {\n // [KRef[]];\n const [, refs] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall retireExports ${JSON.stringify(refs)}`,\n );\n this.#handleSyscallExportCleanup(refs, true);\n break;\n }\n case 'abandonExports': {\n // [KRef[]];\n const [, refs] = kso;\n this.#logger?.log(\n `@@@@ ${vatId} syscall abandonExports ${JSON.stringify(refs)}`,\n );\n this.#handleSyscallExportCleanup(refs, false);\n break;\n }\n case 'callNow':\n case 'vatstoreGet':\n case 'vatstoreGetNextKey':\n case 'vatstoreSet':\n case 'vatstoreDelete': {\n this.#logger?.warn(`vat ${vatId} issued invalid syscall ${op} `, vso);\n break;\n }\n default:\n // Compile-time exhaustiveness check\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n this.#logger?.warn(`vat ${vatId} issued unknown syscall ${op} `, vso);\n break;\n }\n return harden(['ok', null]);\n } catch (error) {\n this.#logger?.error(`Fatal syscall error in vat ${this.vatId}`, error);\n this.#recordVatFatalSyscall('syscall translation error: prepare to die');\n return harden([\n 'error',\n error instanceof Error ? error.message : String(error),\n ]);\n }\n }\n\n /**\n * Log a fatal syscall error and set the illegalSyscall property.\n *\n * @param error - The error message to log.\n */\n #recordVatFatalSyscall(error: string): void {\n this.illegalSyscall = { vatId: this.vatId, info: makeError(error) };\n }\n}\n"]}