1.2 KiB
1.2 KiB
libdatacenter 缺陷修复方案
缺陷 1 & 2: AO/Param 重注册持锁外 delete
问题: dc_signal_ao(line 1123) 和 dc_signal_param(line 1347-1348) 在 re-registration 路径中,
dc_delete_signal_data 在 dc_signal_add_to_map 锁外执行,use-after-free 风险。
修复: 将 re-registration 路径重构为在 signal_ao.mtx/signal_param.mtx 锁内完成 delete+replace。
具体:先加锁,再 delete 旧数据并替换新指针,unlock。
缺陷 3: 回调向量无锁写入
问题: change_cb_list.push_back 和 out_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