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

40 lines
1.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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处修改 |
## 验证
```bash
./release/build.sh
```