已开启
[安全整改] R6 问题单3:缓冲区与内存安全问题整改(32 项修复) #312
wuyike创建于 6 天前
[安全整改] R6 问题单3:缓冲区与内存安全问题整改(32 项修复) #312
已开启
合并受阻
6 天前 添加了label:waiting_on_author
openharmony_ci
6 天前 评论:
6 天前 评论:
感谢提交 Pull Requests !此PR未通过DCO校验。
校验失败可能原因:
1. 未签署“DCO协议”(开发者原创声明协议),在线签署、查看签署状态。
2. Commits 中未包含 Signed-off-by信息,参考FAQ处理。
修复上述问题后,在PR的评论框输入“check dco” ,单击”评论”,系统将再次进行DCO校验。
当前检测到如下Commits的Signed-off-by邮箱未签署DCO协议:
Thanks for submitting a pull request. This pull request has not passed the DCO check.
Possible causes:
1. You have not signed the Developer Certificate of Origin (DCO). Sign the DCO and check DCO status.
2. The commits do not contain the Signed-off-by information. To resolve this issue, see FAQs.
After resolving the preceding issues, enter check dco in the comment box of this pull request and click Comment. The system will check DCO status again.
The Signed-off-by emails in the following commits have not signed the DCO:


6 天前 添加了label:dco检查失败
Closes #260
2026-10-16-R5问题单3_缓冲区与内存安全_修改方案
一、项目基线与会话范围
fix-r5-problem3-memory-safety(forkwuyike/communication_nearlink_service)fix-r5-problem3-memory-safety→ 上游 masterea60c21(含扫描 HEAD3cad27e;两基线间仅 4 文件变更且与本单无交集,63 条逐条复核均仍存在)31c44e3(两笔:2d21826修复 32 项 +31c44e3回退问题1/问题9),均含Signed-off-by(DCO)二、处置总账表
对账: 63 = 本 PR 已修复 30 项 + 回退 2 项(问题1/问题9)+ 评审不修改 31 项,无未知或静默丢失项。不修改决策经逐条信任边界核验(跨边界且外部输入可达者优先修复;进程内防御纵深/引擎失败路径/契约限制类本轮不动),完整证据链见任务归档
docs/技术证据.md。三、本 PR 修复明细(30 项)
问题2 B-003(高危)TypeAndFormatDesc 向 NULL desc 执行 memcpy_s
问题3 B-007(高危)accept 路径 1 字节上下文被强转 DLI_ICGCbkParam* 越界读
问题4 B-008(高危)完成事件回调不校验 cmdRes->size 即读结构体
问题5 B-013(高危)多值读响应把 2 字节 PDU 头计入可用长度
问题6 B-014(高危)RecvPairingCfm 在发送失败同步释放 slink 后继续使用(UAF)
问题7 B-016(高危)SmSendMessage 失败释放 slink 后 5 处调用方继续使用(UAF 族)
问题8 B-017(高危)16B 混淆密码缓冲仅初始化前 4B,12B 栈残留空中下发
问题11 B-032(中危)socket 长度前缀强转读取+按其大小做最大 50KB VLA
问题12 B-033(中危)HID 报文 size/2 无上限做 VLA 栈分配
问题13 B-047(中危)SetReport IPC 入口对 report 无长度上限
问题14 B-048(中危)同问题13 入口视角(同点闭环)
问题17 B-076(中危)解码消息内嵌 dataLen 未与外层缓冲核对即全量拷贝
问题20 B-088(中危)ReadLocalCsCapsCbk 不校验 size 即定长拷贝
问题21 B-092(中危)ACB 数量 uint16→uint8 截断,256 倍数清零致发送停摆
问题22 B-100(低危)空 vector 取 &value_[0](形式 UB)
问题25 B-109(低危)(int)char 作解码表索引,≥0x80 负下标
问题26 B-110(低危)UUID 长度>16 时 offset 下溢野指针写(空口可达)
问题27 B-115(低危)0x0100U<<idx 在 idx≥32 移位 UB
问题36 B-161(低危)OnServicesRediscovered 写侧计数无上限
问题38 B-164(低危)size_t 写 int32 隐式窄化无上限
问题40 B-172(低危)系统属性仅判下界即左移/作索引
问题42 B-175(低危)CallAttributeInfo 未清零,strlen 读栈残留可外发
问题45 B-185(低危)先读 data[0] 后验长度(len==0 越界读)
问题47 B-190(低危)重复报告句柄覆盖指针泄漏旧缓冲
问题48 B-192(低危)分片长度截断进 uint8 wire 字段
问题49 B-193(低危)SetScanFilterCbk 不验 size 即读字段
问题54 B-207(低危)READ_BY_UUID 结果条目数截断 uint8 回绕
问题58 B-222(低危)mps 无符号减法下溢成 ~65529
问题59 B-224(低危)缓存上限判断 <= 差 1(64/256 各超 1)
问题62 B-233(低危)DECODE4BYTE_LITTLE 高字节有符号左移 UB
四、回退与不修改(2 + 31 项)说明
31c44e3回退两文件改动(hadm_parser_iq.c、dli_hadm_event.c),根因修复后重新立项。五、修改文件表(32 文件 +123/-38)
| services/stack/src/cp/bsl/sle/servm/ssap/src/ssap_utils.c | +4/-0 | 问题26 |) |
| services/stack/src/cp/bal/profile/hid/src/hid_stm.c | +8/-0 | 问题2、问题47 |
| services/service/src/hid/HidHostService.cpp | +8/-5 | 问题12 |
| services/ipc/src/nearlink_hid_host_stub.cpp | +6/-0 | 问题13、问题14 |
| services/stack/src/dli/cmd/src/dli_cmd.c | +6/-2 | 问题3 |
| services/stack/src/cp/bsl/sle/cm/icb/src/cm_icb_mgr.c | +1/-1 | 问题3 |
| services/stack/src/cp/bsl/sle/cm/link/src/sle_access_dli.c | +4/-2 | 问题4 |
| services/stack/src/cp/bsl/sle/servm/ssap/src/ssapc_client.c | +2/-1 | 问题5 |
| services/stack/src/cp/bsl/sle/sm/src/sm_nego.c | +6/-1 | 问题6 |
| services/stack/src/cp/bsl/sle/sm/src/sm_passcode.c | +12/-2 | 问题7、问题8 |
| services/stack/src/cp/bsl/sle/sm/src/sm_password.c | +3/-0 | 问题7 |
| services/stack/src/cp/bsl/sle/sm/src/sm.c | +2/-0 | 问题7 |
| services/stack/src/cp/bsl/sle/sm/src/sm_dhkey.c | +2/-1 | 问题7 |
| services/service/src/datatransfer/nearlink_sle_datatransfer_service.cpp | +4/-4 | 问题11 |
| services/service/src/tws/TwsSharedLibApi.cpp | +2/-0 | 问题17 |
| services/stack/src/cp/nlstkfwk/cfgdb/src/nlstk_cfgdb.c | +2/-1 | 问题20 |
| services/stack/src/dp/dtap/src/dtap_scheduler.c | +7/-2 | 问题21 |
| frameworks/ets/taihe/nearlink_ssap/src/ani_nearlink_ssap_server.cpp | +1/-1 | 问题22 |
| services/stack/src/cp/bsl/sle/qosm/autorate/src/qosm_audio_dfx.c | +4/-4 | 问题25 |
| frameworks/ets/taihe/common/taihe_native_object.cpp | +3/-0 | 问题27 |
| services/ipc/src/nearlink_ssap_client_callback_proxy.cpp | +2/-0 | 问题36 |
| services/ipc/src/nearlink_ssap_client_stub.cpp | +12/-2 | 问题38(含 #include
| services/service/src/asc/ASCService.cpp | +5/-3 | 问题40 |
| services/service/src/ccp/CcpService.cpp | +2/-2 | 问题42 |
| services/stack/src/cp/bal/audioctl/cctl/src/ccp_ccs_server.c | +2/-0 | 问题45 |
| services/stack/src/cp/bsl/sle/devd/src/devd_adv.c | +1/-0 | 问题48 |
| services/stack/src/cp/bsl/sle/devd/src/devd_scan.c | +2/-0 | 问题49 |
| services/stack/src/cp/bsl/sle/servm/ssap/src/ssapc_app.c | +5/-0 | 问题54 |
| services/stack/src/dp/dtap/src/dtap.c | +2/-1 | 问题58 |
| services/stack/src/dp/dtap/src/dtap_trans_basic.c | +1/-1 | 问题59 |
| services/stack/src/dp/dtap/src/dtap_trans_stream.c | +1/-1 | 问题59 |
| services/stack/src/utils/include/byte_codec.h | +1/-1 | 问题62 |
六、典型修复示例
问题26(空口可达越界写,本 PR 最高优先):
SSAPS_ReadByUuidReqHandle(ssaps_server.c:1075)将uuidSize = PDU长度 - 偏移直接传入SSAP_GetUuidFromPktBuf,全仓 11 个调用点中唯独此点无 ∈{2,16} 校验,对端构造长 PDU 即触发offset = 16 - srcBufLen下溢野指针写。修复在函数入口挡住srcBufLen > 16,一处覆盖全部调用点。问题6/7(UAF 族): SM 配对链路 6 处采用仓内既有
SmPkgDispatcher:162的"发送后重查 slink"模式,不改变状态机失败清理语义。七、验证声明
git diff upstream/master --numstat32 文件 +123/-38 与两笔提交一致过程审计(OhYeah)