展出用于合作处理客人出错(PostgreSQL嵌入)的行刑堆头室
作者: f0rr0创建于 2026年9月8日更新于 2026年9月8日
□ 使用大小写: PostgreSQL 在终端陷阱之前, 需要提前执行套装检查
我们用RustWASIX 将PostgreSQL 18.4 装入Oliphaunt中,并连载LLVM AOT。 深 JSON/表达式/PL/pgSQL 递归暴露出错配:PostgreSQL检查其在WASM线性内存中的C/Shadow堆栈,但引擎有一个单独的本土执行堆栈. 后者可以先用完.
我们消耗的运行时间是Wasmer 7.2.1 / ermer-wasix 0.702.1;下面的实验是Linux x86 64,没有变化的1 MiB执行-tack默认. 它们不是在6793 / #6795 / #6774的7.2.0-alpha.1中报告的每一次ASan故障的再现,也不是目前上游主机的资格.
#6913中的硬特例入门后卫独立有用. 我们的附加要求是更早的合作检查**: PostgreSQL仍然必须有足够的执行堆栈来提升其普通的SQLSTATE `54001',从它的宾-地错误边界中解开风,回滚并保持连接的可用性. 我们并不要求抓住一个终端瓦斯默堆叠流陷阱,假装PostgreSQL恢复了.
嵌入式解决方案需要什么
- ** 测量活动WASM执行堆**,不包括警卫页/平台储备。 一个普通的Rust主机回调运行在母堆上,因此取样其本地地址测量错误堆栈. 使用真实的SP, 包括在消毒剂下; 区分不支持/无法获得的会计与已知预算。
- ** 稳定会计,跨越接通电话、集合堆和陷阱。 ** 恢复父堆栈上先前的边框, 所以客人的非本地退出不能跳过恢复 。 对于一个已配置的预算,不要仅仅因为一个较大的缓存堆栈被再利用而默默地暴露出额外的容量.
- ** 从发动机硬层分离应用程序回收政策。 ** 引擎保护自己的帮助者/unwinder;PostgreSQL选择一个更早的阈值,涵盖不受控制的下行,错误报告和清理. 任何阈值都无法保证任意不受限制的代码可以恢复.
- ** 一个廉价、范围狭窄的查询。 ** 我们利用瓦斯默现有的功能注册/特朗普林机器 以固定的scalar运行时间操作为原型. 它的成功路径没有分配,锁定,用户回调或主机-stack开关. 普通主机呼叫保持隔离状态,不需要挂起-stack快照. 我们不需要任意回调来绕过这种隔离,也不需要瓦斯默上游的PostgreSQL专用ABI.
- ** 明确的后端合同。 ** 我们的原型拒绝在没有会计支持的情况下构建约束,并在有支持的援引中终止缺失的会计。 浏览器/V8和Windows需要自己的支持合同;假的无限预算不是替代.
证据和可重复使用的代码
我们的候选人通过 . . . . . . .
内容来源: wasmerio/wasmer