| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
refactor: prelaunch no call request 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> Change-Id: Ic48c93dcef13e366ed3da1cd4774289497c00f5a | 7 天前 | |
!20168 merge dev_aa into master support aa for 2in1/tablet Created-by: ProfaneAria Commit-by: 任国军 Merged-by: openharmony_ci Description: **IssueNo**: **Description**: **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | | | 成员变量进行赋值或创建需要排查并发 | | | 谨慎在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扫描): --- report_id: codecheck_b3d2bd9129 commit_id: b3d2bd91297b006a5de9e00c77bcaa95b32cf426 commit_subject: "support aa for 2in1/tablet" scope: "仅修改部分(git diff a3ad1b9bc0..HEAD, 13 files)" dimensions_executed: - security-scanner - logic-scanner score: 91 risk_level: low gate_decision: approve findings_count: p0: 0 p1: 0 p2: 1 p3: 2 --- # Codecheck Report: support aa for 2in1/tablet ## 1. 门禁结论 | 项目 | 结果 | |------|------| | 总分 | **91 / 100** | | 风险等级 | Low | | 上库决策 | **Approve** — 无 P0/P1,评分 ≥ 90 | | 必检维度 | security-scanner ✅ + logic-scanner ✅ | **一句话结论**: 为 aa attach/detach/test/start -D/start -p 新增 -l 本地调试标志和 LOCAL_DEBUG_OTHER_APPS 权限放行通道,权限为 system_basic 级别且仅 PC/Pad 可申请,设备类型约束由权限系统保证。存在 1 个行为变更需确认、2 个低优先级建议。 ## 2. 扣分原因 | 严重等级 | 数量 | 扣分 | 说明 | |---------|------|------|------| | P0 | 0 | 0 | — | | P1 | 0 | 0 | — | | P2 | 1 | -5 | aa test -D 新增开发者模式要求(行为变更) | | P3 | 2 | -4 | Want 参数设计气味 + provision 耦合文档建议 | | **合计** | **3** | **-9** | **91 分** | ## 3. 必须立即处理 (P0/P1) 无。 ## 4. 建议跟进 (P2/P3) ### P2-001: aa test -D 新增开发者模式要求(行为变更) **位置**: services/abilitymgr/src/ability_manager_service.cpp:14734-14750 (CheckLocalDebugPermission) **问题描述**: 重构后 StartUserTest(ams:11741)新增 CheckLocalDebugPermission(isDebugApp, isDebugFromLocal) 调用。对 aa test -D(isDebugApp=true, isDebugFromLocal=false),CheckLocalDebugPermission 走到: cpp if (!isDebugFromLocal && !system::GetBoolParameter(DEVELOPER_MODE_STATE, false)) { return ERR_NOT_DEVELOPER_MODE; // ams:14745-14747 } 原 StartUserTest 在 AMS 层**不做开发者模式校验**(仅下游 AppMgrService::StartUserTestProcess 的 IsShellCall() 门控)。 **行为变更对比**: | 场景 | 改动前(开发者模式关闭) | 改动后(开发者模式关闭) | |------|----------------------|----------------------| | aa test | ✅ 通过 | ✅ 通过(!isDebugApp && !isDebugFromLocal → ERR_OK) | | **aa test -D** | **✅ 通过**(无开发者模式检查) | **❌ ERR_NOT_DEVELOPER_MODE** | | aa test -l | ✅ 通过 | ✅ 通过(local debug 放行) | | aa test -D -l | ✅ 通过 | ✅ 通过(local debug 放行) | **影响**: 仅影响 aa test -D(不带 -l)在未开启开发者模式的设备上。与 aa start -D(ams:768 已有同样检查)行为一致。 **修复建议**: 维持当前行为(与 aa start -D 一致)。若有 CI 脚本在非开发者模式设备上运行 aa test -D,需确保开发者模式已开启。 ### P3-001: ohos.param.debugFrom Want 参数直接驱动权限决策 **位置**: services/appmgr/src/app_mgr_service.cpp:889 **问题描述**: want.GetBoolParam("ohos.param.debugFrom", false) 由调用方通过 IPC 设置,直接传入 IsAllowLocalDebugOtherApps 作为 isDebugFromLocal 参数。虽然实际权限检查用 IPCSkeleton::GetCallingTokenID() 不可伪造(binder 内核填充),但 Want 参数直接驱动安全决策分支选择违反"不信任调用方提供的安全标志"最佳实践。 **修复建议**: 可在 app_mgr_service.cpp 中增加来源校验(如仅 Shell token 来源的 debugFrom=true 可信),或改用服务端独立判定的调用方属性。当前不构成独立绕过——参数仅选择检查路径,实际授权由 LOCAL_DEBUG_OTHER_APPS 权限(system_basic 级别)保证。 ### P3-002: aa start -p -l 与 provision 检查耦合 **位置**: services/abilitymgr/src/ability_manager_service.cpp:761-776 **问题描述**: aa start -p <perfCmd> -l 会令 isDebugFromLocal=true → checkDeveloperModeFlag=true → 触发 CheckAppProvisionMode(ams:773),对非 DEBUG 签名的目标应用返回 ERR_NOT_IN_APP_PROVISION_MODE。而 aa start -p(无 -l)不触发 checkDeveloperModeFlag,不检查 provision。 **影响**: 性能剖析常针对 release 包,-l 与 release 目标的 perf 剖析不兼容。语义上"本地调试 release 包"应通过 AttachAppDebug 路径(由 IsAllowAttachOrDetachAppDebug 放行),而非 StartAbility 路径,故属合理耦合。 **修复建议**: 在帮助文本 HELP_MSG_START 中注明 [-l] 仅对 debug 签名包生效。 ## 5. 分维度速览 | 维度 | 发现数 | P0 | P1 | P2 | P3 | 结论 | |------|--------|----|----|----|----|------| | security-scanner | 2 | 0 | 0 | 0 | 2 | P3: Want 参数设计气味; P3: provision 耦合(与 logic 合并) | | logic-scanner | 2 | 0 | 0 | 1 | 1 | P2: aa test -D 行为变更; P3: provision 耦合 | ## 6. 排除项(已确认安全/已澄清) | 排除项 | 结论 | 依据 | |--------|------|------| | ~~IsPCOrPad() 设备类型检查缺失~~ | ✅ 澄清 | LOCAL_DEBUG_OTHER_APPS 权限为 system_basic 级别,仅 PC/Pad 可申请,设备类型约束由权限系统保证。isPCOrPad_ 死字段已清理 | | ~~权限保护级别未确认~~ | ✅ 澄清 | 已确认权限为 system_basic 级别 | | IPC 鉴权身份伪造 | ✅ 安全 | VerifyCallingPermission 使用 IPCSkeleton::GetCallingTokenID() 由 binder 内核填充,不可伪造 | | 短路求值非预期跳过 | ✅ 安全 | IsAllowLocalDebugOtherApps 仅在非 SA/Shell 时求值,语义正确 | | isDebugFromLocal=false 行为一致性 | ✅ 安全 | IsAllowLocalDebugOtherApps(false) 首行返回 false,!false=true 与改前等价 | | BuildUserTestWant 提取等价性 | ✅ 安全 | 纯提取 want 构造,无控制流变更 | | GetBundleInfoForUserTest 返回值等价 | ✅ 安全 | U0→userId 顺序与返回码完全保留 | | !isDebugApp && !isDebugFromLocal → ERR_OK | ✅ 安全 | 下游 IsShellCall 仍兜底 | See merge request: openharmony/ability_ability_runtime!20168 | 8 天前 | |
!20226 merge refactor/enable-optimize-config into master perf(build): enable size_optimize_config on 130 SO targets Created-by: RuiChen_01 Commit-by: RuiChen_01 Merged-by: openharmony_ci Description: **IssueNo**: **Description**: Enable size optimization on the 130 SO targets that previously shipped without any optimization config (audit list attached in review discussions). New services/common:size_optimize_config: - -Oz, -fdata-sections, -ffunction-sections, -fstack-protector-strong, -D_FORTIFY_SOURCE=2 + -Wl,--gc-sections - **No explicit -flto** — the toolchain already forces ThinLTO globally (build/config/compiler), and targets must not override the LTO mode; this config only adds per-function/data-section granularity so the linker drops unreferenced code, shrinking ROM without touching link policy. Applied to 130 ohos_shared_library targets across: - frameworks/js/napi, frameworks/ets/ani, frameworks/cj (ffi + extension modules) - agent_runtime_framework (9 SOs) - ets_environment, cj_environment - interfaces/inner_api (ability_manager parts, error_utils, base contexts, deps_wrapper, page_config_manager, insight intent client) - services: libappms, libupms(+plugins), perm_verification, hisysevent_report, user_controller - service_router_framework: libsrms, srms_fwk - utils: runtime_utils, freeze_util, startup_util Notes: - The 8 cj ffi targets already carrying -O2 keep their target-level flag ordering (target flags win over configs; they still gain sections + gc-sections). - The 110 existing optimize_config users are intentionally untouched. - Insertion verified programmatically: every configs += line lands inside its intended target block (0 misplaced after fix; conditional if(){}-wrapped module targets handled via brace-matching, not column-0 heuristics). Net: 98 files, +155 lines, no behavior change beyond size optimization. **稳定性自检:** | 自检项 | 自检结果 | |---|---| | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | N/A | | 成员变量进行赋值或创建需要排查并发 | N/A | | 谨慎在lambda表达式中使用引用捕获 | N/A | | 谨慎在未经拷贝的情况下使用外部传入的string、C字符串 | N/A | | map\vector\list\set等stl模板类使用时需要排查并发 | N/A | | 谨慎考虑加锁范围 | N/A | | 在IPC通信中谨慎使用同步通信方式 | N/A | | 禁止传递this指针至其他模块或线程 | N/A | | 禁止将外部传入的裸指针在内部直接构造智能指针 | N/A | | 禁止多个独立创建的智能指针管理同一地址 | N/A | | 禁止在析构函数中抛异步任务 | N/A | | 禁止js对象在非js线程创建、使用或销毁 | N/A | | 禁止在对外接口中未经判空直接使用外部传入的指针 | N/A | | 禁止接口返回局部变量引用 | N/A | | 禁止在信号函数中加锁 | N/A | | 禁止在关键流程执行耗时操作 | OK(仅编译选项) | | 禁止将同一个cpp编译在不同的so中 | N/A | **安全编码自检:** | 自检项 | 自检结果 | |---|---| | 裸指针避免通过隐式转换构造为sptr | N/A | | json对象取值前先判断类型 | N/A | | 序列化校验数组大小 | N/A | | 使用明确位宽整型 | N/A | | 外部路径规范化校验 | N/A | | 变量赋初值 | N/A | | readParcelable判空 | N/A | | 内存分配释放成对 | N/A | | 异常退出内存释放 | N/A | | 内存大小合法性校验 | N/A | | 分配后判成功 | N/A | | 禁止realloc/alloca | N/A | | 禁止打印敏感信息 | N/A | | 禁止打印内存地址 | N/A | | 整数运算防溢出 | N/A | | 禁止有符号位操作 | N/A | | 禁止指针逻辑/位运算 | N/A | | 外部控制循环次数需校验 | N/A | | 禁止内存操作危险函数 | N/A | | 谨慎不可重入函数 | N/A | | 检查安全函数返回值 | N/A | | 禁止仅凭TokenType绕过权限校验 | N/A | See merge request: openharmony/ability_ability_runtime!20226 | 15 天前 |