已合并
harden IPC and render node safety: null checks, boundary and permission fixes with L0 tests #31451
harden IPC and render node safety: null checks, boundary and permission fixes with L0 tests #31451
已合并
LyBbq创建于 7月21日
LyBbq成员
7月21日

Description:

问题背景:

代码安全加固(safe 专项)排查出的一批缺陷:IPC 入参边界与回写值未初始化、多处外部返回值未判空、水印接口缺少调用方校验、异常路径资源泄漏、析构与其它线程竞争。

修复方案:

  1. 边界修正:CheckCreateNodeAndSurface 的 nodeType 校验由 > nodeTypeMax 改为 >= nodeTypeMax,封堵 NODE_MAX 哨兵值越界传入
  2. 回写值初始化:CreateNode / CreateDisplayNode 在 agent 为空时补写 success = false,stub 侧 bool success 初始化,避免向客户端回写未初始化值
  3. 水印接口权限校验:SetSurfaceWatermark / ClearSurfaceWatermarkForNodes / ClearSurfaceWatermark 对非系统调用方增加 GetCallingPid() == pid 校验,防止应用越权操作其他进程水印
  4. 判空保护:RSRenderService::GetConnection token 判空、GetSurfaceRootNodeId agent 判空、RSRenderNode::SetNeedClearRenderGroupCache 的 stagingRenderParams_ 判空、RSUiCaptureTaskParallel::CreateResources 的 endNodeParams 判空
  5. 资源释放:截屏路径 CopyDataToPixelMap 改 new (std::nothrow) 并在失败时 munmap/close 释放;RSUiCaptureSoloTaskParallel 获取 SharedGPUContext 失败时补 ClearNodeCacheSurface 清理
  6. 并发保护:两个 connect hub 析构函数补锁,与连接建立/移除路径互斥
  7. 新增 5 个 L0 单测覆盖上述边界与判空分支

Issue number:https://gitcode.com/openharmony/graphic_graphic_2d/issues/25038

Test & Result:

  • 门禁通过:编译、静态检查、冒烟测试均成功,已合入 master
  • 新增 L0 单测 5 个(GetConnection002 / CreateNodeAndSurfaceNodeMaxTest001 / GetSurfaceRootNodeIdNullAgentTest001 / SetNeedClearRenderGroupCacheTest001 等)全部通过

CodeCheck:

类型 自检项 自检结果
多线程 在类的成员变量中定义了vector/map/list等容器类型,且在多个成员函数中有操作时,需要加锁保护 自检结果:
定义全局变量,在多个函数中都有操作时,需要加锁保护 自检结果:
内存操作 调用外部接口时,确认是否对返回值做了判空判断,尤其外部接口返回了nullptr的情况,避免进程崩溃 自检结果:
内存操作优先使用安全函数,并检查其返回值 自检结果:
注意每个异常退出流程,是否都已经将资源释放(推荐使用RAII) 自检结果:
隐式内存分配场景:realpath、ReadParcelable序列化、cJSON相关函数时等,需主动释放或使用智能指针 自检结果:
外部输入 所有外部输入均不可信,需判断外部输入是否直接作为内存分配的大小,数组下标、循环条件、SQL查询等 自检结果:
注意外部字符串数据有无尾0 自检结果:
外部输入的路径不可信,需使用realpath做标准化处理,并判断路径的合法性 自检结果:
敏感信息 注意日志中打印敏感信息需匿名化 自检结果:
数学运算 代码中是否混合了加减乘除等运算,需检查是否可能导致整数溢出或符号翻转 自检结果:
初始化 类成员、局部变量使用前需初始化 自检结果:
权限管理 作为系统服务对外提供了接口(或RSCmd),是否做了权限保护和校验,只允许申请了权限的应用访问 自检结果:

L0新增用例自检结果

likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 LyBbq 的贡献)
LLyBbq成员
7月21日 关联了issue:[Bug]: fix code safe
openharmony_ciopenharmony_ci成员
7月21日 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
7月21日 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
7月21日 添加了label:dco检查成功
LyBbq成员
7月21日 评论:

start build

likedislike
此处折叠了48条消息 查看更多
openharmony_ciopenharmony_ci成员
7月23日 合入了pull request,合并节点 SHA:e7836a082cf993ebde735aca9067463c9be07833
openharmony_ciopenharmony_ci成员
7月23日 删除了label:waiting_for_review
openharmony_ciopenharmony_ci成员
7月23日 添加了label:merged
LLyBbq成员
8月31日 修改标题为 “harden IPC and render node safety: null checks, boundary and permission fixes with L0 tests”,原标题为“fix”
LLyBbq成员
8月31日 修改了pull request 的描述