2.0 KiB
FAIL
crates/ely-files/src/key.rs:55 — [P1] 第 6 轮的锁与凭据作用域缺陷在不同数据根目录下仍成立:BaseDirs::data_local_dir() 在 Linux 随进程的 XDG_DATA_HOME 改变,第 43 行的凭据身份始终是全局 ElyOffice Recovery/recovery-key。同一用户在同一桌面会话中用不同 XDG_DATA_HOME 启动两个应用并首次初始化时,两者取得不同锁,能够覆盖同一系统凭据。Linux 容器构建后,以共享的隔离凭据后端调用未修改的 RecoveryKey::load(),受控交错实测两次加载均成功、返回密钥不同;A 先生成的加密恢复点用最终持久密钥枚举时报 InvalidData: the sealed point is unreadable。相同数据根目录的对照通过。修复方向:将锁和凭据绑定到同一稳定身份,使凭据命名空间随数据根目录隔离,或为同一系统凭据选择独立于进程数据目录配置的共同锁;补不同 XDG_DATA_HOME 的跨进程初始化和最终密钥解密回归。
crates/ely-files/src/key.rs:65 — [P1] 锁前读取可将尚未持久化的密钥成功返回给另一个应用。当前 Linux 配置 linux-native-sync-persistent 的 keyring 3.6.3 后端先写共享 keyutils 缓存,再写 Secret Service;后一步失败时会删除刚建的缓存。A 持锁初始化、密钥已进入缓存而 Secret Service 尚未完成时,B 在这里读取缓存并直接返回,绕过初始化锁;A 随后失败回滚,B 已生成的恢复点失去可重新加载的密钥。按该依赖的实际发布与回滚顺序构造隔离后端,通过公开入口实测:B 成功返回并写入加密恢复点,A 初始化失败后密钥消失,重试产生的新持久密钥读取该点报 InvalidData。临时副本将读取移入锁内后,同一探针通过;原有 85 项测试全部通过。修复方向:让读取等待初始化事务结束,并以持久凭据后端的完成结果判定密钥可用;补初始化中途可见、持久化失败回滚及随后重试的并发回归。