Lobsters | 原文链接 | 2026-08-26 收录

再看 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 检查点与长寿命读事务之间如何触发这场灾难。

核心要点

金句

一次陈旧读取让 SQLite 的检查点丢弃已提交的 WAL 帧,长达十六年。
返回 Lobsters 首页