Files
ElyOffice/tasks/reviews/C06.3-r9.md
T

6 lines
1.6 KiB
Markdown

FAIL
crates/ely-files/src/key.rs:61 — [P2] 新增账户查询通过 `getpwuid` 取得共享静态存储,随后在同步保护之外读取 `pw_dir`;Linux 上另一线程的账户查询可改写该存储,使恢复密钥锁目录漂移。普通账户 `/home/reviewer` 下,一线程执行原样的 `account_home()`,另一线程调用 `getpwuid(0)`,第 6 次查询即返回 `/root`;通过原样公开入口 `RecoveryKey::load()` 与隔离凭据后端回放,第 9627 次加载出现 `PermissionDenied`,已有恢复密钥因此加载失败。临时副本改用调用者持有缓冲区的 `getpwuid_r` 后,同一并发探针 20000 次加载通过。修复方向:采用可重入账户查询,处理缓冲区不足、查询失败与账户缺失,并补并发查询其他账户时锁目录始终属于当前账户的回归。r8 的不同 `HOME`/`XDG_DATA_HOME` 双进程初始化回放已通过,两份恢复点均可用最终持久密钥解密。
crates/ely-files/src/key/tests.rs:241 — [P2] 新增 Unix 回归测试将系统账户目录硬编码为 `/Users/zacharyzhang`,使其他账户及 Linux 的正确实现必然测试失败。macOS 本机 88 项测试通过;Linux 同版本依赖构建后,以普通账户运行得到 86 项通过、1 项失败,此处实际值为 `/home/reviewer`,期望值为 `/Users/zacharyzhang`。该测试也没有改变 `HOME`,无法锁住 r8 的环境覆盖场景。修复方向:从当前测试账户取得基准,在独立子进程中分别设置不同 `HOME`,验证账户目录和共同锁保持一致,并验证最终持久密钥能解密各进程的恢复点。