RTU/mimo/plan/libdatacenter缺陷修复方案.md

1.2 KiB
Raw Blame History

libdatacenter 缺陷修复方案

缺陷 1 & 2: AO/Param 重注册持锁外 delete

问题: dc_signal_ao(line 1123) 和 dc_signal_param(line 1347-1348) 在 re-registration 路径中, dc_delete_signal_datadc_signal_add_to_map 锁外执行use-after-free 风险。

修复: 将 re-registration 路径重构为在 signal_ao.mtx/signal_param.mtx 锁内完成 delete+replace。 具体:先加锁,再 delete 旧数据并替换新指针unlock。

缺陷 3: 回调向量无锁写入

问题: change_cb_list.push_backout_change_cb_list.push_back 在多处无锁调用。

修复: 在 dc_signal_add_to_map 末尾或调用点加 dc_signal_map.mtx 保护 push_back。

缺陷 4: YK 跳过值校验

问题: dc_signal_yk_set_status 只调 dc_check_ctrl_valid,不调 dc_check_val_valid

修复: DIRECT 步骤增加 dc_check_val_valid 调用。

缺陷 5: strncpy 安全

问题: IP/MAC/C 类型用 strncpy(dst,src,len),源串=len时不补\0。

修复: 改为 memcpy(dst, src, len)

涉及文件

文件 改动
src/system/libdatacenter/src/dc_signal.cpp 5处修改

验证

./release/build.sh