再看 SQLite 的 WAL-Reset 漏洞:一次陈旧读取让检查点丢弃已提交帧达十六年
来源: theconsensus.dev — 2026-08-23
概述
Phil Eaton 深挖 SQLite 的 WAL-Reset bug:一次陈旧读取(stale read)让 SQLite 的 checkpoint 把已提交的 WAL 帧丢弃,这个 bug 潜伏了十六年。作者用约 100 行 C 负载复现了这个竞态,仅用公开的 SQLite API 就在几秒内同时得到丢失写入和损坏的数据库文件,并解释了 WAL 检查点与长寿命读事务之间如何触发这场灾难。
核心要点
- 陈旧读取让 checkpoint 丢弃已提交的 WAL 帧,潜伏十六年
- 用 100 行 C 负载复现这个竞态
- 几秒内同时导致丢失写入与数据库损坏
金句
一次陈旧读取让 SQLite 的检查点丢弃已提交的 WAL 帧,长达十六年。
👍 0
👎 0
返回 Lobsters 首页