已关闭
[Bug]: converter工具内存泄漏 #242
liuchengji3创建于 3月28日关闭于 4月2日
3月28日 添加了label:bug
3月28日 关联分支 由 [] 改变为 [master]
3月28日 问题后端类型 由 [] 改变为 [CPU]
3月28日 关联组件 由 [] 改变为 [B-SIG-InnerDelivery]
3月28日 关联了pull request:fix: fix convert bug
4月2日 关闭了 issue
4月2日 issue状态由 TODO 改变为 DONE
Checklist
[x] 1. 我已经搜索过相关问题,但没有得到预期的帮助.
[x] 2. 最新版本中该错误尚未修复.
[x] 3. 请注意,如果您提交的Bug描述缺少相应的环境信息和最小可复现的demo,我们将很难复现和解决该问题,从而降低收到反馈的可能性,甚至该问题将被关闭.
🐞 问题详细描述
1️⃣ 内存泄漏漏洞 (CWE-772)
文件: mindspore-lite/src/litert/c_api/model_c.cc
函数: ModelC::GetInputs() 和 ModelC::GetOutputsTensor()
严重性: 🟡 中危
问题描述:
在分配 MSTensor 对象数组时,如果某个 new 操作失败,之前已分配的对象没有被释放,导致内存泄漏。
受影响代码:
for (size_t i = 0; i < inputs.size(); i++) {
inputs_[i] = new (std::nothrow) MSTensor(inputs[i].impl());
if (inputs_[i] == nullptr) {
// 旧代码:直接返回,没有释放已分配的内存
inputs_.clear();
return nullptr;
}
}
潜在影响:
2️⃣ 索引错误 (CWE-476)
文件: mindspore-lite/tools/common/string_util.cc
函数: Hex2ByteArray()
严重性: 🟢 低危
问题描述:
在十六进制字符串转换函数中,检查条件时错误地使用了 hex_str[p] 而不是 hex_str[p+1],导致大写字母 A-F 的处理逻辑错误。
受影响代码:
// 第193行:正确
if (hex_str[p + 1] >= 'a' && hex_str[p + 1] <= 'f') {
byte_array[i] = (byte_array[i] << half_byte_offset) | (hex_str[p + 1] - 'a' + a_val);
// 第195行:错误 - 应该检查 hex_str[p + 1] 而不是 hex_str[p]
} else if (hex_str[p] >= 'A' && hex_str[p] <= 'F') {
byte_array[i] = (byte_array[i] << half_byte_offset) | (hex_str[p + 1] - 'A' + a_val);
潜在影响:
3️⃣ 错误处理逻辑缺陷 (CWE-391)
文件: mindspore-lite/tools/converter/parser/onnx/onnx_model_parser.cc
函数: ConvertOnnxGraph()
严重性: 🟡 中危
问题描述:
在 ConvertGraphInputs() 失败时,错误地返回 RET_OK 而不是 RET_ERROR,导致程序继续执行并可能崩溃。
受影响代码:
status = ConvertGraphInputs(onnx_graph, anf_graph, anf_nodes_map);
if (RET_OK != status) {
ReturnCode::GetSingleReturnCode()->UpdateReturnCode(status);
MS_LOG(ERROR) << "convert graph inputs failed.";
return RET_OK; // ❌ 错误:应该返回 RET_ERROR
}
潜在影响:
📊 严重程度统计
┌─────────┬──────┬────────────────────────────────────────┐
│ 严重性 │ 数量 │ CWE 类型 │
├─────────┼──────┼────────────────────────────────────────┤
│ 🟡 中危 │ 2 │ CWE-772 (内存泄漏), CWE-391 (错误处理) │
├─────────┼──────┼────────────────────────────────────────┤
│ 🟢 低危 │ 1 │ CWE-476 (索引错误) │
└─────────┴──────┴────────────────────────────────────────┘
详细的环境信息描述
CPU 模型转换场景
加解密场景
ARM or X86
其他辅助信息
版本信息
master
Thanks for contributing 🎉!