| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
!20483 merge max into master WantAgent实例清理 Created-by: SkyQAQ Commit-by: songkeyuan Merged-by: openharmony_ci Description: **IssueNo**: https://gitcode.com/openharmony/ability_ability_runtime/issues/16249 **Description**: WantAgent实例清理 **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | | | 成员变量进行赋值或创建需要排查并发 | | | 谨慎在lambda表达式中使用引用捕获 | | | 谨慎在未经拷贝的情况下使用外部传入的string、C字符串 | | | map\vector\list\set等stl模板类使用时需要排查并发 | | | 谨慎考虑加锁范围 | | | 在IPC通信中谨慎使用同步通信方式 | | | 禁止传递this指针至其他模块或线程(特别是eventhandler任务) | | | 禁止将外部传入的裸指针在内部直接构造智能指针 | | | 禁止多个独立创建的智能指针管理同一地址 | | | 禁止在析构函数中抛异步任务 | | | 禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁 | | | 禁止在对外接口中未经判空直接使用外部传入的指针 | | | 禁止接口返回局部变量引用 | | | 禁止在信号函数中加锁 | | | 禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作 | | | 禁止将同一个cpp编译在不同的so中 | | **安全编码自检:** | 自检项 | 自检结果 | | -------------------------------------------------------------- | -------- | | 裸指针避免通过隐式转换构造为sptr | | | json对象在取值之前必须先判断类型,避免类型不匹配 | | | 序列化时必须对传入的数组大小进行校验,避免出现超大数组 | | | 避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型 | | | 外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验 | | | 指针变量、表示资源描述符的变量、bool变量必须赋初值 | | | readParcelable获取的对象使用前需要判空 | | | 分配和释放内存的函数需要成对出现 | | | 申请内存后异常退出前需要及时进行内存释放 | | | 内存申请前必须对内存大小进行合法性校验 | | | 内存分配后必须判断是否成功 | | | 禁止使用realloc、alloca函数 | | | 禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰 | | | 禁止打印内存地址 | | | 整数之间运算时必须严格检查,确保不会出现溢出、反转、除0 | | | 禁止对有符号整数进行位操作符运算 | | | 禁止对指针进行逻辑或位运算 | | | 循环次数如果收外部数据控制,需要检验其合法性 | | | 禁止使用内存操作类危险函数,需要使用安全函数 | | | 谨慎使用不可重入函数 | | | 必须检查安全函数的返回值,并进行正确处理 | | | 禁止仅通过TokenType类型判断绕过权限校验 | | **TDD Result**: **XTS Result**: ### 是否已执行L0用例 - [ ] 已验证 - [ ] 不涉及。如不涉及,请写明理由 ### AI检视评分(使用本地代码检视skills扫描): # 代码检视报告 — WantAgent实例清理 (commit 26af22d8)(Round 2) > 统一报告由 codecheck 工作台生成,用于门禁管控。检视范围:commit 26af22d8f430c9343eb305ec8824f77b5946c1d4(subject: "WantAgent实例清理")。 > > **Round 2 变更说明**:相对 Round 1(commit 8723207),本提交仅含两处差异——① DeleteUnsharedRecordsOnDeath 中 ReduceWantAgentNumber(key) 改为 HandleReduceWantAgentNumber(key)(即修复 Round 1 的 P1 项 LOG-01);② 移除 ability_manager_proxy_test.cpp 中多余的 #include "pending_want_record.h"。其余代码与 Round 1 完全一致。 > > **P3 屏蔽说明**:应门禁要求,本轮屏蔽 P3 级问题(SEC-02 / SEC-03 / LOG-03),不计入 findings、评分与门禁。被屏蔽项仅在文末附录列出备查,不参与扣分。 --- ## 报告元数据 <!-- codecheck-report-metadata:start --> yaml codecheck_report: schema_version: "1.0" scope: "WantAgent实例清理 (commit 26af22d8)" round: 2 commit_id: "26af22d8f430c9343eb305ec8824f77b5946c1d4" change_id: "N/A" report_id: "26af22d8-R2" date: "2026-09-20" gate_decision: "approve" risk_level: "low" score: 90 dimensions_required: ["security-scanner", "logic-scanner", "input-scanner"] dimensions_executed: ["security-scanner", "logic-scanner", "input-scanner"] findings_total: 2 findings_by_severity: {P0: 0, P1: 0, P2: 2, P3: 0} gate_blockers: [] must_fix: [] followups: ["SEC-01", "LOG-02"] <!-- codecheck-report-metadata:end --> --- ## 1. 门禁结论 | 项目 | 结论 | | ----------------- | ------------------------------------ | | 决策 | **approve** | | 风险等级 | 🟢 low | | 评分 | **90/100** | | 阻塞项 | 无 P0 | | 必须修复(P0/P1) | 0 项(Round 1 的 LOG-01 已修复) | | 建议跟进(P2/P3) | 2 项(P2);3 项 P3 已按门禁要求屏蔽 | **一句话结论**:Round 1 唯一的 P1 缺陷(死亡清理路径 WantAgent 计数只增不减)已被正确修复——改为直接调用 HandleReduceWantAgentNumber,不再依赖后台线程中不存在的 IPC 调用上下文;删除路径已知记录满足 GetIsThirdParty()==true,直接递减与创建时 AddWantAgentNumber 对称,无双重递减、无新增锁序风险。屏蔽 P3 后剩余 2 项 P2 均为建议跟进项,不阻塞上库。 --- ## 2. 扣分原因 > (仅 gate_decision=block 时呈现;本轮为 approve,本节省略。) --- ## 3. 必须立即处理(P0/P1) **无。** > Round 1 的 LOG-01(P1)已在本提交修复:services/abilitymgr/src/pending_want_manager.cpp:554 由 ReduceWantAgentNumber(key) 改为 HandleReduceWantAgentNumber(key)。修复正确性确认如下: > > - DeleteUnsharedRecordsOnDeath 仅处理 GetIsThirdParty()==true 的记录,该记录在创建时(GetWantSenderLocked 三方分支)经 AddWantAgentNumber 计数(pending_want_manager.cpp:235),故直接递减是计数对称且正确的。 > - HandleReduceWantAgentNumber 为 PendingWantManager 私有成员(pending_want_manager.h:200),调用合法。 > - 死亡清理路径持有 mutex_,HandleReduceWantAgentNumber 内部取 countMutex_;与既有 Add/ReduceWantAgentNumber 调用点(GetWantSenderLocked/CancelWantSenderLocked)锁序一致(mutex_ → countMutex_),无逆序,无死锁。 > - 无双重递减:记录一经 death 路径 erase,不再可能走 CancelWantSenderLocked → ReduceWantAgentNumber。 --- ## 4. 建议本轮或下一补档处理(P2/P3) | ID | 优先级 | 问题 | 建议行动 | 排期 | | ------ | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -------------- | | SEC-01 | P2 | HandleWantAgentAppDied 延迟任务 lambda 捕获裸 this,且 subManagersHelper_ 只在提交前判空、任务体内未判定 → 服务析构/成员置空时存在 UAF/空解引用隐患 | 与同文件 InitWantAgentAppStateObserver 保持一致的 weak_from_this() 保护;任务内重新判空 subManagersHelper_ | 建议本轮一并修 | | LOG-02 | P2 | RegisterWantAgentHolder(IPC 线程,未持 mutex_)经 MarkSharedIfNeeded 读 creatorPid_/写 isShared_,与 DeleteUnsharedRecordsOnDeath(持 mutex_)并发:creatorPid_ 无同步读 + 记录"先被标记共享后被擦除/取消"的窗口 | MarkSharedIfNeeded 走统一加锁路径(或 RegisterWantAgentHolder 获取 manager mutex_);creatorPid_/isThirdParty_ 统一纳入锁保护 | 下一补档 | --- ## 5. 分维度速览 | 维度 | 结果 | 关键说明 | | ---------------- | -------------------------------------------- | --------------------------------------------- | | security-scanner | 1 项(SEC-01 为 P2;SEC-02/03 为 P3 已屏蔽) | 无崩溃/UAF 必现高危;裸 this 延迟任务为 P2 | | logic-scanner | 1 项(LOG-02 为 P2;LOG-03 为 P3 已屏蔽) | Round 1 计数缺陷已修复,余下登记/清理竞态 | | input-scanner | N/A(无 DB/文件持久化 sink) | IPC 边界问题已归入 SEC-02/SEC-03(P3 已屏蔽) | --- ## 6. 关键发现详情 > 本轮无 P0/P1。P2 项详情如下: ### [SEC-01] 延迟任务捕获裸 this 与成员空解引用(P2, scanner=security-scanner) - **位置**:services/abilitymgr/src/ability_manager_service.cpp:10323-10329 - **触发路径**:HandleWantAgentAppDied 提交 [this, bundleName, pid](){ subManagersHelper_->HandlePendingWantDeathCleanup(...); } 延迟 500ms;入口判空 subManagersHelper_,任务体内未判定且裸捕获 this。 - **影响**:服务析构/成员置空窗口内 UAF;与 InitWantAgentAppStateObserver 的 weak_from_this() 模式不一致。 - **证据**:auto task = [this, bundleName, pid](){ subManagersHelper_->HandlePendingWantDeathCleanup(bundleName, pid); }; - **建议**:改 weak_from_this() 捕获 + 任务内 lock() 判空 + 判空 subManagersHelper_。 ### [LOG-02] 持有者登记与死亡清理并发竞态(P2, scanner=logic-scanner+security-scanner) - **位置**:services/abilitymgr/src/ability_manager_service.cpp:10311-10329、services/abilitymgr/src/pending_want_record.cpp:528、services/abilitymgr/src/pending_want_manager.cpp:539 - **触发路径**:RegisterWantAgentHolder(IPC 线程,未持 mutex_)→ MarkSharedIfNeeded(读 creatorPid_ 无锁 / 写 isShared_),与 DeleteUnsharedRecordsOnDeath(持 mutex_)并发。 - **影响**:creatorPid_ 无同步读的数据竞争;记录被"标记 shared 前已 erase/取消"的窗口。 - **证据**:RegisterWantAgentHolder 无 lock_guard 即调 MarkSharedIfNeeded(ability_manager_service.cpp:10328);MarkSharedIfNeeded 读 creatorPid_ 无锁(pending_want_record.cpp:528-536)。 - **建议**:统一加锁路径。 --- ## 附录:被屏蔽的 P3 项(备查,不参与门禁) | ID | 优先级 | 问题 | 位置 | | ------ | ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | SEC-02 | P3(已屏蔽) | static_cast<PendingWantRecord*>(target.GetRefPtr()) 类型脆弱(当前唯一本地 IWantSender 实现故安全) | services/abilitymgr/src/ability_manager_service.cpp:10318-10327 | | SEC-03 | P3(已屏蔽) | 新 IPC REGISTER_WANT_AGENT_HOLDER(6181) 无调用方鉴权(当前影响有限) | services/abilitymgr/src/ability_manager_stub.cpp:2436-2445 | | LOG-03 | P3(已屏蔽) | Unmarshalling 异步 ffrt::submit 全局副作用 + 单测异步 flaky 隐患 | interfaces/inner_api/wantagent/src/pending_want.cpp:471-473 | --- > 说明:本次检视不修改任何源码,仅产出报告与建议。修复由用户确认后另起任务,并回到 AGENTS.md 的 Constraints/Verification 章节执行(编译 abilityms/ability_runtime、单测 ability_manager_service_first_test/pending_want_* 等)。 See merge request: openharmony/ability_ability_runtime!20483 | 10 天前 | |
minimize header exposure: move services/ paths from public_config to private include_dirs Move services/ include paths out of public_config blocks to private include_dirs across 22 BUILD.gn files. public_config propagates include paths to all downstream consumers, leaking internal service implementation headers that no external module actually includes. Also fixes TDD and SDK build targets that depended on abilityms_config being in public_configs. Signed-off-by: xialiangwei <xialiangwei1@huawei.com> Change-Id: Ifa69faca82800b78b0ecdec99d235a3386d5cab2 | 15 天前 | |
modify build-profile.json5 : compileSdkVersion: 26.0.1 Co-Authored-By:Agent Signed-off-by: xuezhou_yan <yangang20@huawei.com> | 19 天前 | |
Revert "JSON统一为cJSON" Signed-off-by: 13776621730 <zhawei12@huawei-partners.com> Change-Id: I69dc57782680ece5c5d2d1416464516405d070ad | 1 年前 | |
minimize header exposure: move services/ paths from public_config to private include_dirs Move services/ include paths out of public_config blocks to private include_dirs across 22 BUILD.gn files. public_config propagates include paths to all downstream consumers, leaking internal service implementation headers that no external module actually includes. Also fixes TDD and SDK build targets that depended on abilityms_config being in public_configs. Signed-off-by: xialiangwei <xialiangwei1@huawei.com> Change-Id: Ifa69faca82800b78b0ecdec99d235a3386d5cab2 | 15 天前 | |
feat: AgentCli Signed-off-by: yangxuguang-huawei <yangxuguang3@h-partners.com> AI[100%] Human Fixed[0%] Human[0%] AI Adopted[100%] Co-authored-by: pi (glm-5.2) <ai@local> Co-authored-by: pi (glm-5.3) <ai@local> Change-Id: I0501561c59aaacb1369ec0b0d37da6d465d0660f | 20 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 天前 | ||
| 15 天前 | ||
| 19 天前 | ||
| 1 年前 | ||
| 15 天前 | ||
| 20 天前 |