约束与陷阱
本文只记录项目硬性约束和最易犯的 6 个陷阱。各场景详细约束见对应知识文档:用户时序见 user-directory-lifecycle.md,卷状态见 disk-volume-lifecycle.md,密钥见 crypto-key-management.md,IPC 死锁见 ipc-interface-guide.md。
硬性约束
- 用户时序不可跳步:
PrepareAddUser → StartUser → CompleteAddUser。 - 卷状态不可跳转:
MOUNTED → EJECTING → REMOVED。 - EL2 密钥锁屏移除、解锁安装,锁屏时不可访问 EL2 数据。
- 用户隔离:密钥和目录的 userId 必须匹配。
- 错误码必须具体:禁止 E_ERR。
6 个常见陷阱
陷阱 1:用户目录创建跳步
跳过 StartUser 直接 CompleteAddUser → EL2-EL4 密钥未激活,加密数据不可访问。
陷阱 2:卷状态非法跳转
从 MOUNTED 直接置 REMOVED → 内核可能仍持有引用,必须经过 EJECTING。
陷阱 3:Daemon 崩溃后 IPC 状态假设
Daemon 重启后内存状态为空,Manager 的缓存可能过期。必须重新同步状态,不要假设之前的 IPC 结果仍有效。
陷阱 4:锁屏时访问 EL2 数据
LockUserScreen 后 EL2 密钥已从内核移除。此后访问 EL2 加密文件会失败,必须等 UnlockUserScreen 完成。
陷阱 5:跨用户密钥操作
用 userId=100 的密钥操作 userId=105 的目录 → 密钥不匹配,数据解密失败。密钥和目录的 userId 必须一致。
陷阱 6:持有锁时执行 IPC
在持有 Manager 锁时调用 Daemon IPC → 可能双进程互锁。先释放锁再发起 IPC。
修改前检查
对照上述 6 个陷阱,当前改动是否触犯了任何一个?